首页 > 解决方案 > 解析 Django 模板时的操作顺序

问题描述

我试图弄清楚 Django 在呈现 html 模板时如何处理操作顺序。

下面以我要回答的问题为例。

我有一个基本模板,其中“{% 包括 %}”是一段包含“{% block %}”语句的代码。

此基本模板在“{% extends %}”中使用,并且“{% block %}”语句在此子模板中被覆盖。

common.html

<div>
{% block content %}{% endblock %}
</div>

base.html

{% include common.html %}

child.html

{% extends 'base.html'%}
{% block content %}
..... some code
{% endblock %}

从我的测试来看,这个块并没有像我期望的那样被覆盖,是我做错了什么还是这取决于 Django 模板解析中的操作顺序。

标签: djangodjango-templates

解决方案


这实际上与操作顺序无关,而与include标签的定义无关。从文档

include 标签应该被认为是“渲染这个子模板并包含 HTML”的实现,而不是“解析这个子模板并包含它的内容,就好像它是父模板的一部分一样”。这意味着包含的模板之间没有共享状态——每个包含都是一个完全独立的渲染过程。

块在被包含之前被评估。这意味着包含来自另一个块的模板将包含已经评估和渲染的块 - 而不是可以被例如扩展模板覆盖的块。


推荐阅读