救命!Django 媒体小部件没有出现
我一直在想这个问题。我按照示例使用了jQuery的日期选择器来处理我表单中的日期字段。以下是我的代码(注意:我的代码缩进是正确的):
from django import forms
from django.contrib.admin.widgets import FilteredSelectMultiple
from myproject.customUsers.models import SchoolClass#,Student
from django.contrib.auth.models import User
from myproject.widgets import CalendarWidget
class ConsentFormTpl(forms.Form):
title = forms.CharField()
message = forms.CharField()
deadline = forms.DateField(widget=CalendarWidget)
availClass = forms.ModelChoiceField(queryset=SchoolClass.objects.all(),empty_label="None")
students = forms.ModelMultipleChoiceField(queryset=User.objects.filter(groups__name='Students'),widget=FilteredSelectMultiple("Students",is_stacked=False))
在我的小部件文件中,我有:
class CalendarWidget(forms.DateInput):
class Media:
css = {
'all':('css/ui-darkness/jquery-ui-1.8.9.custom.css',),
}
js = ('js/jquery-ui-1.8.9.custom.min.js',)
最后在我的模板中,我使用了 {{form.media}}
。奇怪的是,CalendarWidget的CSS和JS文件没有出现在我的HTML中。(而FilteredSelectMultiple的文件是有的)。我通过命令行检查了一下,似乎已经存在:
>>> from django import forms
>>> from myproject.widgets import CalendarWidget
>>> class C(forms.Form):
... title = forms.DateField(widget=CalendarWidget)
...
>>> c=C()
>>> print c.media
<link href="http://xyz.com/media/css/ui-darkness/jquery-ui-1.8.9.custom.css" type="text/css" media="all" rel="stylesheet" />
<script type="text/javascript" src="http://xyz.com/media/js/jquery-ui-1.8.9.custom.min.js"></script>
模板:
{% extends "base.html" %}
{% block content %}
<script type="text/javascript">
$(document).ready(function(){
//some stuff here
})
}
//When user change classes, load new set of students
$("select#id_availClass").change(function(){
getStud( $(this).val() );
})
$("#id_deadline").datepicker();
// Loads initial set of students when form loads
getStud(-1);
})
</script>
<link rel="stylesheet" type="text/css" href="http://xyz.com/media/admin/css/base.css" />
<link rel="stylesheet" type="text/css" href="http://xyz.com/media/admin/css/forms.css" />
<script type="text/javascript" src="/admin/jsi18n/" />
<script type="text/javascript" src="/media/admin/js/core.js" />
{{ form.media }}
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="yes" value="Submit" />
</form> {% endblock %}
更新:我成功地在将表单媒体传入render_to_response之前打印出来了。文件确实存在!
form = ConsentFormTpl()
print form.media
return render_to_response('consent_form/consent_form2.html',{'form':form},context_instance=RequestContext(request))
有没有人能给点建议?
3 个回答
-1
这个问题可能是因为你在widget
这个参数里给了CalendarWidget
的类,而不是它的实例。
试着把:
deadline = forms.DateField(widget=CalendarWidget)
改成
deadline = forms.DateField(widget=CalendarWidget())
0
试着在你自定义的小部件文件的最上面加上以下内容。
from django import forms
1
啊,感谢@seitaridis,我终于找到了我的错误所在。我没有指定文档类型(doctype),而且`这个符号是不被允许的。哎呀,我为这么简单的错误感到很尴尬。