我正在尝试弄清楚呈现html模板时Django如何处理操作顺序。
将以下内容作为我要回答的示例。
我有一个基本模板,其中的代码段“ {%included%}”中包含“ {%block%}”语句。
此基本模板用在“ {%extended%}”中,而“ {%block%}”语句在此子模板中被覆盖。
common.html
<div>
{% block content %}{% endblock %}
</div>
base.html
{% include common.html %}
child.html
{% extends 'base.html'%}
{% block content %}
..... some code
{% endblock %}
根据我的测试,此块没有被我期望的覆盖,我是在做错什么还是归结为Django模板解析中的操作顺序。
答案 0 :(得分:1)
这与include
标记的定义实际上与操作顺序无关。来自the docs:
应当将include标记视为“呈现此子模板并包含HTML”的实现,而不应视为“解析此子模板并像其父对象一样包含其内容”。这意味着所包含的模板之间没有共享状态-每个包含都是一个完全独立的呈现过程。
先评估区块,然后再评估。这意味着包含另一个块的模板将包含已经已经评估并呈现的块,而不是可以被例如扩展模板覆盖的块。