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