Django,有条件地覆盖模板块

yvt65v4c  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(80)
{% extends "Flow/base.html" %}

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

字符串
上面的代码片段覆盖了base.html中的head块,即使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 %}


但这也会覆盖base.htmlhead
base.htmlhead不为空,它包含当no_tracking为False时必须在页面上的脚本。
我可以在base.html中覆盖它们,但是base.html没有no_tracking的概念,因为它是传递给正在呈现的视图的上下文变量,而不是它扩展的变量。
我该如何解决这个问题?

wxclj1h5

wxclj1h51#

您可以使用**{{ block.super }}[Django-doc]获取父块渲染的内容:
如果你需要
从父模板中获取块的内容,{{ block.super }}变量**就可以完成这个任务。如果要添加到父块的内容,而不是完全覆盖它,这将非常有用。使用{{ block.super }}插入的数据将不会自动转义(...),因为它已经在父模板中转义了(如果需要的话)。
所以在这里我们可以用它来给块添加一些“额外的内容”:

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

字符串

相关问题