Django的dateTimeWidget没有显示出来(django dateTimeWidget

2019-07-18 16:17发布

Django的新手在这里。 我有一个注册页面的尝试。

它由文本字段(姓名,用户名,密码等),将DateField(生日)的。

我试图用一个forms.DateTimeInput部件检测DateField,但是当呈现页面,没有任何反应。 难道我做错了什么? 这是否有什么即时俯瞰? 这看起来很简单,但我不能让它的工作。

这是我的表格

class RegisterForm(forms.Form):
    username  = forms.CharField(max_length= 50)
    password = forms.CharField(label=u'Password',widget = forms.PasswordInput(render_value=False))#password

    birthday = forms.DateField(required=False,initial=datetime.date.today,widget = forms.DateTimeInput())#25 Oct 2006

而且我非常简单的HTML

<form action="" method = "POST">
{{ form.as_p}}
<input type='Submit' value='Register'/>
</form>

Answer 1:

Django的DateInput控件不呈现任何东西,但一个纯文本输入。 但它确实验证用户的输入对各种格式的,所以它不是无用的。

大多数人希望它以同样的方式在Django管理接口中发现的日期选择器的行为,所以它绝对是一个有点混乱。

它可以使用在AdminDateWidget自己的应用程序,但我会建议反对。 这需要大量的摆弄周围,使其工作的 。

最简单的解决方法是使用类似JQuery的UI日期选择器 。 简单地包括在以下<head>您的网页:

<link type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/redmond/jquery-ui.css" rel="Stylesheet" />
<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"></script> 

然后在底部,把下面的行激活日期选择您的输入内容:

<script type="text/javascript"> 
  $(function(){
    $("#id_birthday").datepicker();
  });
</script>

如果你创建你的自定义窗口小部件很多日期字段,你可以使这个多一点干forms.py

class JQueryUIDatepickerWidget(forms.DateInput):
    def __init__(self, **kwargs):
        super(forms.DateInput, self).__init__(attrs={"size":10, "class": "dateinput"}, **kwargs)

    class Media:
        css = {"all":("http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/redmond/jquery-ui.css",)}
        js = ("http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js",
              "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js",)

指定每个日期字段应该在表单中使用这个小工具:

birthday = forms.DateField(label="Birthday", widget=JQueryUIDatepickerWidget)

而在你的模板,包括在以下<head>

{{form.media}}

并激活日期选择为通过将以下页面底部的各个领域:

<script type="text/javascript"> 
  $(function(){
    $(".dateinput").datepicker();
  });
</script>


Answer 2:

日历日期选择器是不是形成框架的一部分。
但是,您可以使用jQuery的日期选择控件

<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-min.js"></script> 
<!-- give correct location for jquery.js -->
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-ui-min.js"></script> 
<!-- give correct location for jquery-ui.js -->
<script type="text/javascript">
   jQuery(function() {
       jQuery("#id_birthday").datepicker({ dateFormat: 'yy-mm-dd' });
   });
</script>
<form method="post">
    {{ form.as_p }}
    <input type="submit" value="Create Phase" />
</form>

在点击/选择生日的文本框,它会显示一个日历控件选择
请您给您的jquery.js和jQuery-ui.js的正确位置



Answer 3:

你不应该使用DateTimeInput用DateField -无论是使用DateInputDateTimeField

不过,我怀疑你的意思是通过“什么也没有发生”是日历日期选择的链接不会出现。 这些都不是标准的形式框架的一部分,该文档并不表明他们不出现一个日期/ DateTimeInput。 他们是管理应用程序的一部分,所以如果你需要他们在自己的应用程序,你需要明确地包括JavaScript文件。

要做到这一点最简单的方法可能是使用AdminDateWidgetdjango.contrib.admin.widgets ,而不是DateInput。 您还需要在您的模板jsi18n脚本:

<script type="text/javascript" src="/admin/jsi18n/"></script>


文章来源: django dateTimeWidget not showing up
标签: django forms