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>
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>
日历日期选择器是不是形成框架的一部分。
但是,您可以使用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的正确位置
你不应该使用DateTimeInput用DateField
-无论是使用DateInput
或DateTimeField
。
不过,我怀疑你的意思是通过“什么也没有发生”是日历日期选择的链接不会出现。 这些都不是标准的形式框架的一部分,该文档并不表明他们不出现一个日期/ DateTimeInput。 他们是管理应用程序的一部分,所以如果你需要他们在自己的应用程序,你需要明确地包括JavaScript文件。
要做到这一点最简单的方法可能是使用AdminDateWidget
从django.contrib.admin.widgets
,而不是DateInput。 您还需要在您的模板jsi18n脚本:
<script type="text/javascript" src="/admin/jsi18n/"></script>