解析Django模板时的操作顺序

时间:2019-06-04 08:40:41

标签: django django-templates

我正在尝试弄清楚呈现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模板解析中的操作顺序。

1 个答案:

答案 0 :(得分:1)

这与include标记的定义实际上与操作顺序无关。来自the docs

  

应当将include标记视为“呈现此子模板并包含HTML”的实现,而不应视为“解析此子模板并像其父对象一样包含其内容”。这意味着所包含的模板之间没有共享状态-每个包含都是一个完全独立的呈现过程。

     

先评估区块,然后再评估。这意味着包含另一个块的模板将包含已经已经评估并呈现的块,而不是可以被例如扩展模板覆盖的块。