使用带有松散表单的Django表单资源(媒体类)时,页面中未包含.js文件

时间:2013-10-23 13:51:16

标签: django forms django-crispy-forms

我正在重现Django文档(doc)中关于如何使用自定义日历窗口小部件自动包含.js或.css文件的基本示例:

class CalendarWidget(forms.TextInput):
class Media:

    js = ('test.js',)

在简单表单的字段定义中使用该CalenderWidget时,不会在页面中注入test.js文件。我使用Crispy表单在我的模板中呈现表单,所以我认为这应该是问题的根源......

现在,我必须在我的模板中添加{{form.media}}标签,以强制将test.js文件添加到页面中,但我想找到一种方法来使事情变得更多&# 34;自动"就像它应该是......

非常感谢

1 个答案:

答案 0 :(得分:1)

我刚才遇到了同样的问题......并找到了一两种解决方法。

开始于:

class MyForm(Form):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)

然后:

1)您可以将form.media添加到您的输出中,但这假设您的表单在您的上下文中被称为表单。

        self.helper.layout.append(Layout(HTML("{{ form.media }}")))

2)你可以调用self.media.render() - 我认为这更好:

        self.helper.layout.append(Layout(HTML(self.media.render())))

您也可以调用insert()而不是append。