Django中的模板继承
我使用的是Django 1.1,我有一个模板,一个基本模板,所有其他页面都从中继承。它定义了一系列在几乎整个网站上都是恒定不变的东西,比如这个导航栏:Django中的模板继承,django,templates,template-inheritance,Django,Templates,Template Inheritance,我使用的是Django 1.1,我有一个模板,一个基本模板,所有其他页面都从中继承。它定义了一系列在几乎整个网站上都是恒定不变的东西,比如这个导航栏: <div id="navbar"> {% block navbar %} <a href="">Link 1</a> <a href="">Link 2</a> <a href=
<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>
{%block navbar%}
{%endblock%}
但Django在子模板中的默认行为是让子模板完全覆盖父模板中的块。我这里有一个页面,它不一定要覆盖navbar块,只需向其中添加一些特定于该页面的条目,但现在我唯一能看到发生这种情况的方法是,从父级复制navbar块,然后将其包含在模板+我的添加中。还有其他方法吗?您不必定义所有块,因此,如果您不在子页面中定义navbar块,它将使用来自父页面的块内容。在子模板中使用
{{block.super}
来包含来自父块的内容。如阿拉斯代尔所述,{block.super}}
允许您使用来自父级的值
但是,如果你发现你总是需要这样做,你应该考虑你的积木是否足够大。您应该能够以这样的方式对它们进行布局,即每个块只定义它所需的内容。您可以定义嵌套块,因此您还可以执行以下操作:
<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>
{%block navbar%}
{%block导航栏额外%}{%endblock%}
{%endblock%}
需要覆盖整个导航栏的模板可以这样做,而其他模板可以覆盖“导航栏额外”块。在我看来,这比在事先知道需要扩展性的地方使用{{block.super}要干净一些;YMMV