【问题标题】:Django Template overridingDjango模板覆盖
【发布时间】:2020-02-18 08:44:03
【问题描述】:

我想知道,在 django 中使用模板时,我能够扩展其他基本模板并覆盖基本模板中的一些块。所以我的问题是当我覆盖时,被覆盖块中的代码是否仍然会被渲染然后被覆盖,或者它永远不会运行并且只呈现新块?

例子:

base.html

{% block menu %}
    {% for option in menu %}

       ...Create the menu entries

    {% endfor %}
{% endblock menu %}

extender.html

{% extends base.html %}

{% block menu %}
    ... some other tags
{% endblock menu %}

在这种情况下,如果 base.html 中的原始 for 循环被覆盖,它会运行吗?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    据我所知,除非您想在扩展模板中保留其代码,否则该块将被覆盖。

    如果您想保留原始块,可以使用{{ block.super }}

    base.html

    [...]
    <body>
        {% block header %}
            base header content
        {% endblock %}
        [...]
    </body>
    

    extended.html

    {% extends "base.html" %}
    {% block header %}
        {{ block.super }}
        new content added
    {% endblock %}
    [...]
    

    G.

    【讨论】:

    • 不错! block.super 对我来说是新的,所以从你的回答中理解,如果 base.html 在块中有一个耗时的代码,它不会运行,因为它被覆盖了?
    • 是的,就是这样!引擎会忽略(删除)基础模板中的代码,因此,如果您执行 {% block header %}{% endblock %} 之类的操作,它将呈现(并处理)一个空字符串,从而避免基础模板中的任何循环或重载
    • 谢谢@gariel,这就是我要找的。​​span>
    猜你喜欢
    • 2017-07-06
    • 2015-04-15
    • 2015-03-16
    • 2013-01-23
    • 2019-08-11
    • 2013-05-22
    • 2017-08-23
    • 2014-08-30
    • 2017-11-24
    相关资源
    最近更新 更多