django - 解析 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 模板解析中的操作顺序。
解决方案
这实际上与操作顺序无关,而与include
标签的定义无关。从文档:
include 标签应该被认为是“渲染这个子模板并包含 HTML”的实现,而不是“解析这个子模板并包含它的内容,就好像它是父模板的一部分一样”。这意味着包含的模板之间没有共享状态——每个包含都是一个完全独立的渲染过程。
块在被包含之前被评估。这意味着包含来自另一个块的模板将包含已经评估和渲染的块 - 而不是可以被例如扩展模板覆盖的块。
推荐阅读
- php - 无缓冲查询错误 - 如何在本地主机上获取它们
- r - 如何使用其他人的条件语句在数据框中添加具有相似名称的新变量?
- excel - 硬编码范围有效,但使用命名范围失败 - Excel VBA
- javascript - 有没有办法改进此代码以避免大型数组超时?
- reactjs - 如何在 React.js 中将两个单词写为单个字符串(例如:-课程名称)以呈现文件>
- c# - 循环遍历数据表获取值
- html - PrimeNG的fieldset css与网站原版不一样
- mysql - mysqldump转gzip,如何设置压缩文件的扩展名
- kubernetes - 问:如何设置 Kubernetes 集群以更好地平衡 CPU 负载?
- javascript - 使用 JavaScript 将多个文本框值传递给不同的视图