Django DateInput小部件不会呈现任何东西,只是纯文本输入。不过,它确实会根据各种格式验证用户的输入,所以它不是无用的。
大多数人会认为它的行为与在Django Admin界面中找到的日期选择器的行为相同,所以它肯定有点令人困惑。
可以在您自己的应用程序中使用AdminDateWidget,但我会建议不要这样做。它需要a lot of fiddling around to make it work。
最简单的解决方案是使用类似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>
底部
然后,把下面的行激活日期选择您的输入元素:
<script type="text/javascript">
$(function(){
$("#id_birthday").datepicker();
});
</script>
可以使这个多一点DRY如果你必须在创建自定义窗口小部件很多日期字段您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",)
指定每个日期字段应该在你的f使用这个小工具奥姆斯:
birthday = forms.DateField(label="Birthday", widget=JQueryUIDatepickerWidget)
且模板中,包括在<head>
如下:
{{form.media}}
而且通过将以下页面底部激活日期选择器的所有领域:
<script type="text/javascript">
$(function(){
$(".dateinput").datepicker();
});
</script>
来源
2010-11-08 03:25:48
Tom
你能澄清一下吗?整个表单是不是呈现,还是仅仅是DateTime字段? – David 2009-09-20 07:29:30
窗体和“输入”出现。它的日历小部件没有。 – Tom 2009-09-20 15:55:18
当我读DateInput小部件时,我也期待图形日期选取器控件(就像在django admin中)。不过,我猜这只是一个纯文本框。不直观的IMO。 – User 2010-05-25 04:10:57