Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django包括——他们是邪恶的吗?_Django_Templates_Include_Django Templates - Fatal编程技术网

Django包括——他们是邪恶的吗?

Django包括——他们是邪恶的吗?,django,templates,include,django-templates,Django,Templates,Include,Django Templates,我尊敬的一位朋友和开发人员最近建议我避免在django模板中使用“include”。他们的论据的总的来说是,他们是“邪恶的” 我在理解逻辑上有困难;我的新手意见是,它们是组织可重用html块的一种很好的方法,当必须进行更改时,我不必在多个位置编辑html,只需在一个位置编辑即可 你们这些天才都在想什么?请提供一些在Django模板中使用Include的赞成和反对意见。这似乎有点奇怪。Includes是模板语言的一个非常有效的部分,从第一天起就一直如此,从未被推荐或反对过 您的朋友可能会说您应该更

我尊敬的一位朋友和开发人员最近建议我避免在django模板中使用“include”。他们的论据的总的来说是,他们是“邪恶的”

我在理解逻辑上有困难;我的新手意见是,它们是组织可重用html块的一种很好的方法,当必须进行更改时,我不必在多个位置编辑html,只需在一个位置编辑即可


你们这些天才都在想什么?请提供一些在Django模板中使用Include的赞成和反对意见。这似乎有点奇怪。Includes是模板语言的一个非常有效的部分,从第一天起就一直如此,从未被推荐或反对过

您的朋友可能会说您应该更多地依赖模板继承(这是一种相反的包含)。就目前情况而言,这是正确的-大多数情况下,最好由覆盖或扩展父模板中定义的块组成模板。但是includes肯定有一个用例


他可能会说这是因为从磁盘加载include模板增加了文件系统命中率。在这种情况下,他肯定是不正确的-再次,模板继承模型,这肯定是推荐将有完全相同的命中率;使用可选的缓存文件系统加载器可以避免这两种情况。

正如Daniel所提到的,include完全符合他提到的原因。因此,很难给出赞成和反对的意见,因为这实际上取决于你试图实现的目标

通常,最好在基本模板中的块标记内定义网站的公共元素,并使用模板继承来更改每个页面上所需的部分。然而,如果您只是需要在许多地方重用一段文本,“includes”将是完美的


需要注意的一点是,include不能包含块标记,因为它们是在不了解父页面的情况下自己呈现的。要更好地理解这一点,请参阅或this(非bug)中的注释。如果您发现自己需要此功能,那么值得考虑是否应该将包含的文件移动到块标记内的基础模板中。

他可能会说您最好编写自定义标记。因此,我们没有:

{% for post in blog %}
{% include "blog.tmpl" %}
{% endfor %}
你应该做:

{% for post in blog %}
{% formatPost post %}
{% endfor %}
include方法依赖于名为“post”的对象中的博客帖子,而定制标记方法允许格式化任何内容。例如,如果您有一个页面比较了两篇博客文章,您可以在上下文中将它们作为“post1”和“post2”发送,并执行以下操作:

   <h1>John Said</h1>
   {% formatPost post1 %}
   <h1>And Fred Said</h1>
   {% formatPost post2 %}
约翰说 {%FormatPost1%} 弗雷德说 {%FormatPost2%}
更易于重用。使用includes,您必须将post1和post2重命名为'post',然后包含模板…

如果某人的逻辑总和为'this is evil',则这不是逻辑!开发人员和宗教人士都是如此:)