统一 Django 表单媒体
Posted
技术标签:
【中文标题】统一 Django 表单媒体【英文标题】:Uniting Django Form media 【发布时间】: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 %
标签,它将呈现请求上下文中所有表单的媒体。
【问题讨论】:
【参考方案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 开始它。
【讨论】:
为此获得反对票我有点惊讶。有人可以解释为什么吗?这只是继承块的标准技术。以上是关于统一 Django 表单媒体的主要内容,如果未能解决你的问题,请参考以下文章