【问题标题】:Uniting Django Form media统一 Django 表单媒体
【发布时间】:2013-04-15 22:06:43
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: django forms media


    【解决方案1】:

    您可以通过块和继承来做到这一点。

    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 #}
    

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

    【讨论】:

    • 为此获得反对票我有点惊讶。有人可以解释为什么吗?这只是继承块的标准技术。
    猜你喜欢
    • 2017-12-14
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多