我正在使用Django 1.1,我有这个模板,一个基本模板,所有其他页面都继承自。它定义了一系列在整个网站中都是不变的东西,比如这个导航栏:
<div id="navbar">
{% block navbar %}
<a href="">Link 1</a>
<a href="">Link 2</a>
<a href="">Link 3</a>
<a href="">Link 4</a>
<a href="/admin/">Admin</a>
{% endblock %}
</div>
但Django在子模板中的默认行为是让子项完全覆盖父模板中的块。我这里有这个页面,不一定要覆盖导航栏块,只需添加一些特定于该页面的条目,但是现在我能看到发生的唯一方法就是我是从父母复制导航栏块,然后将其包含在模板+我的添加中。还有其他方法可以做吗?
答案 0 :(得分:7)
在子模板中使用{{ block.super }}
以包含父块中的内容。
答案 1 :(得分:2)
正如Alasdair所说,{{ block.super }}
允许您使用父母的值。
但是,如果您发现总是需要这样做,那么您应该考虑您的块是否足够精细。您应该能够以每个块仅定义所需内容的方式进行布局。
答案 2 :(得分:2)
您可以定义嵌套块,因此您也可以执行以下操作:
<div id="navbar">
{% block navbar %}
<a href="">Link 1</a>
<a href="">Link 2</a>
<a href="">Link 3</a>
<a href="">Link 4</a>
<a href="/admin/">Admin</a>
{% block navbar-extra %}{% endblock %}
{% endblock %}
</div>
需要覆盖整个导航栏的模板可以这样做,而其他模板可以覆盖“navbar-extra”块。在你事先知道你需要可扩展性的情况下,IMO比使用{{block.super}}更清洁; YMMV。
答案 3 :(得分:0)
您不必定义所有块,因此如果您未在子页面中定义navbar块,它将使用来自父级的块内容。