首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django模板解析顺序

Django模板解析顺序
EN

Stack Overflow用户
提问于 2011-02-25 22:11:27
回答 1查看 462关注 0票数 3

Django文档中指定了Django模板的解析顺序吗?

根据编写自定义模板标记和API的文档,Django似乎使用深度优先遍历来构建节点树。但是,我在Django文档中找不到任何可以保证这一点的语句。特别是,我想知道在完成任何呈现之前节点树是否已经完全组装。

此外,这对模板继承有什么影响?派生模板中的{% block ... %}标记是在它们位于基模板中的位置解析的,还是在基本模板之前由{% extends "..." %}标记解析的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-26 07:32:44

答案是肯定的,所有节点都是在创建模板对象时创建的。但是,当您调用该对象的呈现方法时,就会发生这种神奇的情况。此模板对象具有一个在上下文中呈现的NodeList。这个呈现就像您前面所说的,深度优先,它只获取附加到父节点的内嵌子字符串(html)。完成节点呈现的下面是NodeList类。因此,根节点是获取附加到其上的所有节点以最终生成文件的节点。如果您还记得,扩展模板标记必须是模板中的第一个,因此它成为根节点,获取其中所有已呈现的节点。

那么遗产呢?外部根节点是如何呈现的?嗯,我还没有弄清楚这里的上下文角色,但是有一个ExtendsNode是由extends标记创建的。这种类型的节点接收父模板名(基本模板)和包含子模板的所有变量、块和节点的上下文(您实际上调用该子模板来呈现)。因此,当呈现该节点时,它执行与每个节点相同的操作,并追加其子节点。这个类的主要区别在于,它从子模板上下文中获取标记为块模板标记的节点,并在父模板中定义带有该名称的块模板标记时将其追加到任何地方。

因此,首先创建节点,扩展模板标记在呈现模板时设法获得它们。

如果您想知道如何创建节点,可以在Django代码中查找令牌和解析器类

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5123271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档