Django:内置包含标记与自定义包含标记
Django's和Django's的区别是什么Django:内置包含标记与自定义包含标记,django,django-templates,Django,Django Templates,Django's和Django's的区别是什么 我已经阅读了文档,两者似乎都达到了相同的目标:呈现一个传递上下文或变量的模板。它们有不同的用途。include标记仅包含现有模板中的内容,且未经修改。自定义包含标记将上下文传递给函数,该函数可以包含操作上下文的逻辑,然后再将其传递给模板 例如,我可能有一个面板,它将显示在多个页面上。面板的模板需要通过上下文向其传递一些特定的查询。包含该面板的页面不需要这些上下文变量。如果我使用include标记包含面板模板,我必须在包含面板的每个视图中编写这些查询
我已经阅读了文档,两者似乎都达到了相同的目标:呈现一个传递上下文或变量的模板。它们有不同的用途。
include
标记仅包含现有模板中的内容,且未经修改。自定义包含标记将上下文传递给函数,该函数可以包含操作上下文的逻辑,然后再将其传递给模板
例如,我可能有一个面板,它将显示在多个页面上。面板的模板需要通过上下文向其传递一些特定的查询。包含该面板的页面不需要这些上下文变量。如果我使用include
标记包含面板模板,我必须在包含面板的每个视图中编写这些查询,并将它们作为上下文变量传递
或者,我可以编写一个包含查询的自定义包含标记,并将它们传递给面板的模板。通过使用自定义包含标记,我不需要重复代码来在包含面板的每个视图中生成其上下文。我的视图将包含更少的代码,并且只由面板使用的上下文变量也不会太混乱
尽管您的观点是正确的,即仅在未经处理的上下文上传递的自定义包含标记与
include
标记相同。是否需要将模板分隔为较小的文件?使用包括标签(用于可读性、可维护性和干燥)
在呈现模板之前需要包含更多代码吗?使用包含标签(获取更多数据,添加一些业务逻辑。这真的很像另一个没有url的小视图。它像一个模板函数)。原则上,dgel和YardenST的回答所提出的观点是正确的。此外,通过查看django的代码,可以很好地了解这两个选项在性能上的比较情况 使用时,两者之间绝对没有区别。两者最终都会调用该函数,该函数反过来调用从文件系统打开模板文件的模板
render()
仅在循环模板中使用文件时缓存该文件
作为旁注,通过使用,性能可能会有所不同
最后,关于dgel关于在不同视图的公共上下文中使用inclusion标记的建议:当html标记位于跨多个视图的单个基础模板中时,通过使用。这是一种非常常见的渲染场景,例如基本模板中的主菜单。最近我遇到了这个问题,当时我正试图找到最好的路线-
include
vsinclusion tag
,而inclusion tag
中没有真正的额外逻辑
我选择了包含标签
,原因如下:
<!-- include -->
{% include "path/to/funky.html" with arg1=arg1 arg2=arg2 %}
{%包括带有arg1=arg1 arg2=arg2%的“path/to/funky.html”}
vs
{%funky arg1 arg2%}
包含标记
无法从父视图继承变量,使其更能抵御奇怪的错误您提到使用
django.template.loaders.cached.Loader
时可能会出现性能差异。这背后的确切原因是什么?
<!-- inclusion tag -->
{% funky arg1 arg2 %}