首页 > 解决方案 > Django,有条件地覆盖模板块

问题描述

{% extends "Flow/base.html" %}

{% if no_tracking %}
    {% block head %}
        {% include "Flow/common/tracking/disabled.html" %}
    {% endblock %}
{% endif %}

上面的代码片段会覆盖 in 中的headbase.html,即使no_trackingis False。我怎样才能使这种行为有条件?

我想到了这个:

{% block head %}
    {% if no_tracking %}
        {% include "Flow/common/tracking/disabled.html" %}
    {% else %}
    <!-- How can I get "head" of base.html here? -->
    {% endif %}

{% endblock %}

但这也会覆盖headof base.html

headofbase.html不为空,它包含当 no_tracking 为 False 时必须在页面上的脚本。

我可以在 中覆盖它们base.html,但base.html没有概念,no_tracking因为这是传递给正在呈现的视图的上下文变量,而不是它扩展的那个。

我该如何解决这个问题?

标签: djangodjango-templates

解决方案


您可以使用{{ block.super }}[Django-doc]来获取由“父”块呈现的内容:

如果您需要从父模板中获取块的内容,该{{ block.super }}变量就可以解决问题。如果您想添加到父块的内容而不是完全覆盖它,这很有用。插入的数据{{ block.super }}不会被自动转义(...),因为如果需要,它已经在父模板中转义了。

所以在这里我们可以用它来给块添加一些“额外的内容”:

{% block head %}
    {% if no_tracking %}
        {% include "Flow/common/tracking/disabled.html" %}
    {% endif %}
    {{ block.super }}
{% endblock %}

推荐阅读