我有一个如下所示的模板:
{% 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 标题 %}
。因此,当我有第二个模板时,它会尝试从第一个文件继承,如下所示:
{% extends firstfile.html %}
{% block title %}Imarealpage!{% endblock %}
{% block content %}Lorem ipsum dorem smitshm{% endblock %}
{% block title %}
部分未呈现。如何确保它以及包含文件中和扩展模板中定义的任何其他 block 按应有的方式呈现?
最佳答案
您误解了 {% include %}
的工作原理。 {% include %}
标签不是预处理器;它不会在渲染之前将包含模板的代码直接放入包含模板中。相反,{% include %}
会触发包含模板的新独立模板渲染(就像您直接从自己的代码渲染包含模板一样),然后包含渲染的 结果进入所包含模板的渲染中。
这意味着包含模板具有与其包含模板完全独立的继承层次结构。例如,您可以有一个基本的 component.html
模板,其中包含一些 block ,然后有例如foo-component.html
以 {% extends "component.html"%}
开头,并填充 component.html
中的一些 block 。然后你可以有一个 layout.html
,它会 {% include "foo-component.html"%}
,并且将渲染 foo-component.html
,完成其对 component.html
的继承,并将结果放入 layout.html
中的该位置。但是 layout.html
中的任何 block 和 component.html
中的任何 block 之间的关系为零 - 它们是具有单独 block 结构和继承层次结构的单独渲染。
关于python - 包含文件中的 block 未被扩展模板填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15058974/