2

我有一个看起来像这样的模板:

{% include "base/top.html" with context %}
{% include "base/nav.html" with context %}
<div id="content">
    Stuff
    {% block content %}{% endblock %}
</div>
{% include "base/bottom.html" with context %}

base/nav.htmlbase/bottom.html包含静态内容,但base/top.html包含一个{% block title %}. 因此,当我有第二个模板尝试从第一个文件继承时,如下所示:

{% extends firstfile.html %}
{% block title %}Imarealpage!{% endblock %}
{% block content %}Lorem ipsum dorem smitshm{% endblock %}

{% block title %}部分未呈现。如何确保它以及包含文件中和扩展模板中定义的任何其他块按应有的方式呈现?

4

1 回答 1

2

你误解了它的{% include %}工作原理。{% include %}标签不是预处理器;它不会在渲染之前将包含模板的代码直接放入包含模板中。相反,{% include %}触发包含模板的新独立模板渲染(就像您直接从自己的代码渲染包含模板一样),然后将渲染结果包含到包含模板的渲染中。

这意味着包含的模板具有与其包含模板完全分离的继承层次结构。例如,您可以拥有一个包含一些块的基本模板component.html,然后拥有foo-component.html以. 然后你可以有一个that does ,它将渲染,完成它的继承,并将结果放入. 但是其中的任何块和其中的任何块之间的关系为零——它们是具有单独块结构和继承层次结构的单独渲染。{% extends "component.html" %}component.htmllayout.html{% include "foo-component.html" %}foo-component.htmlcomponent.htmllayout.htmllayout.htmlcomponent.html

于 2016-02-19T18:38:24.007 回答