Django,有条件地覆盖模板块

时间:2020-01-05 14:30:16

标签: django django-templates

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

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

以上代码段覆盖了head中的base.html块,即使no_trackingFalse。如何使这种行为成为条件?

我想到了这个

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

{% endblock %}

但这也会覆盖head中的base.html

head中的

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

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

>

我该如何解决?

1 个答案:

答案 0 :(得分:2)

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

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

因此,在这里我们可以使用它向该块添加一些“额外内容”:

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