Django block.super 在特定情况下不起作用

Posted

技术标签:

【中文标题】Django block.super 在特定情况下不起作用【英文标题】:Django block.super not working in a particular caseDjango block.super 在特定情况下不起作用 【发布时间】:2013-09-26 08:57:20 【问题描述】:

我正在尝试扩展包含此块的模板:

    % block headerjs %
    <script type="text/javascript" src=" STATIC_URL js/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src=" STATIC_URL js/bootstrap.min.js"></script>
    <script type="text/javascript" src="% url django.views.i18n.javascript_catalog %"></script>
    % endblock %

为了扩展它,我使用 block.super

% block headerjs %
 block.super 
<script type="text/javascript" src=" STATIC_URL js/formhandler.js"></script>
% endblock %

它不工作, block.super 是空的。我注意到&lt;script type="text/javascript" src="% url django.views.i18n.javascript_catalog %"&gt;&lt;/script&gt; 是原因。当我不加载此脚本时,一切正常。有谁知道为什么?

【问题讨论】:

如果你把它放在引号里怎么办:% url "django.views.i18n.javascript_catalog" %? 你是从正确的基础模板扩展而来的吗? 您的 javascript 目录 url 标签解析正确吗?例如,如果您渲染父模板,您会在 html 中看到什么? 谢谢!这是@alecxe 指出的引号。奇怪的是,在我没有扩展模板而只是使用基础并且它在没有引号的情况下工作之前。无论如何,这足以将 block.super 呈现为空吗? 您的 settings.py 中的 TEMPLATE_DEBUG 值是否设置为 True?如果没有,有时它会在开发过程中抑制这类错误。 【参考方案1】:

从 Django 1.5 开始,您必须在 % url % 模板标签中在视图名称周围加上引号。否则,它现在将被视为上下文变量(因此它将搜索变量 django 如果存在并获取其属性 views 等等......)。 正如 cmets 所指出的,正确的版本是:

<script type="text/javascript" src="% url 'django.views.i18n.javascript_catalog' %"></script>

也许它以前可以工作,因为您使用的是 Django

【讨论】:

以上是关于Django block.super 在特定情况下不起作用的主要内容,如果未能解决你的问题,请参考以下文章

django----模板继承

定情信物(bzoj 3823)

flask 模板block super()的讲解

页脚块模板不会更新 django

如何在 Django 模板中实现面包屑?

django模板之继承标签extend和添加标签include