我有一个看起来像这样的模板:
{% 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.html
和base/bottom.html
包含静态内容,但base/top.html
包含{% block title %}
。因此,当我有第二个模板时,尝试从第一个文件继承,如下所示:
{% extends firstfile.html %}
{% block title %}Imarealpage!{% endblock %}
{% block content %}Lorem ipsum dorem smitshm{% endblock %}
未呈现{% block title %}
部分。如何确保它和包含文件中的任何其他块以及扩展模板中定义的块都按原样呈现?
答案 0 :(得分:2)
你误解了{% include %}
的工作原理。 {% include %}
标记不是预处理器;在渲染之前,它不会将包含的模板代码直接插入到包含模板中。相反,{% include %}
会触发包含模板的新独立模板渲染(就像您直接从自己的代码渲染包含的模板一样),然后将渲染的结果包含在内包含模板的渲染。
这意味着包含的模板与其包含模板具有完全独立的继承层次结构。例如,您可以使用基本component.html
模板,其中包含一些块,然后例如以foo-component.html
开头的{% extends "component.html" %}
并填写component.html
的部分块。然后,您可以拥有一个layout.html
来{% include "foo-component.html" %}
,这将呈现foo-component.html
,并继承component.html
,并将结果放入layout.html
中的那个位置1}}。但是layout.html
中的任何块与component.html
中的任何块之间没有任何关系 - 它们是具有单独块结构和继承层次结构的单独呈现。