将 Django 表单资产(媒体类)与清晰表单一起使用时,页面中不包含 .js 文件

Posted

技术标签:

【中文标题】将 Django 表单资产(媒体类)与清晰表单一起使用时,页面中不包含 .js 文件【英文标题】:.js files not included in page when using Django Form Assets (Media class) with crispy forms 【发布时间】:2013-11-01 20:12:12 【问题描述】:

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

class CalendarWidget(forms.TextInput):
class Media:

    js = ('test.js',)

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

现在,我必须在我的模板中添加自己的 form.media 标记以强制将 test.js 文件添加到页面中,但我想找到一种方法让事情变得更加“自动化” “就像它应该是......

非常感谢

【问题讨论】:

我没有找到这个问题,直到我去这个项目的 github 问题列表。您可以尝试重命名您的标题——也许包括单词 form.media、media、static 【参考方案1】:

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

开始于:

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

然后:

1) 您可以将 form.media 添加到您的输出中,但前提是您的表单在您的上下文中称为 form..

        self.helper.layout.append(Layout(html(" form.media ")))

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

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

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

【讨论】:

以上是关于将 Django 表单资产(媒体类)与清晰表单一起使用时,页面中不包含 .js 文件的主要内容,如果未能解决你的问题,请参考以下文章

Django:基于类的视图无法呈现清晰的表单

模板中 Django 表单的媒体类对象的 JS 和 CSS 列表输出分离

将 twitter 引导程序与 Django 表单一起使用

不要从 django 表单打印媒体

如何将 Django 的内置身份验证与自定义表单(html 模板)一起使用

将 ajax 与 django 表单一起使用时,出现错误“选择一个有效的选择。这不是可用的选择之一。”