django - Django,有条件地覆盖模板块
问题描述
{% extends "Flow/base.html" %}
{% if no_tracking %}
{% block head %}
{% include "Flow/common/tracking/disabled.html" %}
{% endblock %}
{% endif %}
上面的代码片段会覆盖 in 中的head
块base.html
,即使no_tracking
is False
。我怎样才能使这种行为有条件?
我想到了这个:
{% block head %}
{% if no_tracking %}
{% include "Flow/common/tracking/disabled.html" %}
{% else %}
<!-- How can I get "head" of base.html here? -->
{% endif %}
{% endblock %}
但这也会覆盖head
of base.html
。
head
ofbase.html
不为空,它包含当 no_tracking 为 False 时必须在页面上的脚本。
我可以在 中覆盖它们base.html
,但base.html
没有概念,no_tracking
因为这是传递给正在呈现的视图的上下文变量,而不是它扩展的那个。
我该如何解决这个问题?
解决方案
您可以使用{{ block.super }}
[Django-doc]来获取由“父”块呈现的内容:
如果您需要从父模板中获取块的内容,该
{{ block.super }}
变量就可以解决问题。如果您想添加到父块的内容而不是完全覆盖它,这很有用。插入的数据{{ block.super }}
不会被自动转义(...),因为如果需要,它已经在父模板中转义了。
所以在这里我们可以用它来给块添加一些“额外的内容”:
{% block head %}
{% if no_tracking %}
{% include "Flow/common/tracking/disabled.html" %}
{% endif %}
{{ block.super }}
{% endblock %}
推荐阅读
- c++ - 声明指针时无效使用非静态数据成员
- xaml - TemplatedControl Expander 标头未显示
- r - 更快的采摘方法
- c# - WPF C# Animate Linear Gradient Brush 起点或终点
- python-3.x - numpy 数组 cPickle dumpe 的默认编码是 latin-1 吗?
- c# - 我们如何从 chrome 扩展向 wpf 客户端应用程序发送事件
- c# - 在没有 xaml 代码的情况下为 ListView 绑定 SourceItem
- .htaccess - 想要重定向 301 子域
- azure-ad-b2c - 如何在自定义策略内使用在门户上创建的自定义 OpenID Connect 提供程序?
- javascript - HTML:如何使用链接下载 pdf 文件