django dateTimeWidget没有显示出来

Tom*_*Tom 11 forms django

django新手在这里.我尝试了注册页面.

它由文本字段(名称,用户名,密码等)和DateField(生日)组成.

我正在尝试为DateField使用forms.DateTimeInput小部件,但是当呈现页面时,没有任何反应.难道我做错了什么?这有什么东西可以忽略吗?看起来很简单,但我无法让它工作.

这是我的表格

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
Run Code Online (Sandbox Code Playgroud)

而我非常简单的HTML

<form action="" method = "POST">
{{ form.as_p}}
<input type='Submit' value='Register'/>
</form>
Run Code Online (Sandbox Code Playgroud)

Tom*_*Tom 10

Django DateInput小部件除了纯文本输入外不会呈现任何内容.然而,它确实根据各种格式验证用户的输入,因此它没有用处.

大多数人都希望它的行为与Django Admin界面中的日期选择器一样,所以它肯定有点令人困惑.

可以在您自己的应用程序中使用AdminDateWidget,但我会建议不要使用它.需要花费大量时间才能使其正常工作.

最简单的解决方案是使用类似JQuery UI Datepicker的东西.只需在<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> 
Run Code Online (Sandbox Code Playgroud)

然后在底部,输入以下行来激活输入元素上的Datepicker:

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

如果您有多个日期字段,可以通过在以下位置创建自定义窗口小部件,使其更加干燥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",)
Run Code Online (Sandbox Code Playgroud)

指定每个日期字段应在表单中使用此小部件:

birthday = forms.DateField(label="Birthday", widget=JQueryUIDatepickerWidget)
Run Code Online (Sandbox Code Playgroud)

在您的模板中,包含以下内容<head>:

{{form.media}}
Run Code Online (Sandbox Code Playgroud)

并通过将以下内容放在页面底部来激活所有字段的Datepicker:

<script type="text/javascript"> 
  $(function(){
    $(".dateinput").datepicker();
  });
</script>
Run Code Online (Sandbox Code Playgroud)


Raj*_*uri 6

日历日期选择器不是表单框架的一部分.
但是,您可以使用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>
Run Code Online (Sandbox Code Playgroud)

在单击/选择生日文本框时,它将显示日历选择器小部件
请给出jquery.js和jquery-ui.js的正确位置


Dan*_*man 4

您不应该将 DateTimeInput 与DateField- 使用 aDateInput或 a DateTimeField

但是,我怀疑您所说的“什么也没发生”的意思是日历日期选择器的链接没有出现。这些不是标准表单框架的一部分,并且文档并不建议它们确实与 Date/DateTimeInput 一起出现。它们是管理应用程序的一部分,因此如果您在自己的应用程序中需要它们,则需要显式包含 javascript 文件。

最简单的方法可能是使用AdminDateWidgetfromdjango.contrib.admin.widgets而不是 DateInput。您还需要在模板中包含 jsi18n 脚本:

<script type="text/javascript" src="/admin/jsi18n/"></script>
Run Code Online (Sandbox Code Playgroud)