django - 统一 Django 表单媒体

标签 django forms media

我有几个 Django 模板,其中一些具有不同的形式。一些表单使用需要自己的 JS 和 CSS 资源的自定义小部件。这些资源在每个 form.media 中都正确指定

我发现放置所有媒体引用的正确位置是我的 <head>标签,就在我自己的上方css文件。如果我愿意,这将允许我覆盖自定义小部件的外观。所以在我的模板中我有类似的东西:

{% block form_media %}
{{ form1.media }}
{{ form2.media }}
{% endblock %}

(有些模板有不止一种形式)

现在,如果两个表单都使用相同的小部件,那么相同的 JS 和 CSS 文件将被引用两次。这可不好。有没有合理的方法来统一所有媒体引用?

这只是乞求自定义{% context_form_media %}标签,它将呈现请求上下文中所有表单的媒体。

最佳答案

您可以使用 block 和继承来做到这一点。

base.html:

<head>
    {% block form_css %}
        {# base css #}
    {% endblock form_css %}
    {# rest of head #}
</head>
{# rest of html #}

任何form.html:
{% extends "base.html" %}
{% block form_css %}
    {# your form css #}
{% endblock form_css %}
{# your form #}

这样你就可以只注入(inject)适用于该页面的 css/js。如果您还想包含该 block 的所有上游内容,您可以使用 {{ block.super }} 开始它。

关于django - 统一 Django 表单媒体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16156705/

相关文章:

python - Django shell 中的奇怪字符,箭头键不起作用

javascript - 是否可以通过自定义 HTML 表单向 Google 表单提交多个/重复的表单字段?

java - 选择 Image 时获取 File 对象 onActivityResult

java - 如何让自己的视频播放?

android - 从 uri 播放音频

django - 将 S3 上传/浏览与 django-tinymce 集成

angularjs - 在 Angular 模块中获取 Django request.user

javascript - 表单提交成功后重定向

forms - Symfony 2.6.3 {{ form_errors( form ) }} 当 isValid() 返回 false 时为空

python - Django - 在 DetailView 中过滤