救命!Django 媒体小部件没有出现

3 投票
3 回答
2500 浏览
提问于 2025-04-16 12:14

我一直在想这个问题。我按照示例使用了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),而且`这个符号是不被允许的。哎呀,我为这么简单的错误感到很尴尬。

撰写回答