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

时间:2011-12-19 15:01:49

标签: django templates include django-templates

我最近尊敬的朋友和开发人员建议我避免在django模板中使用'Includes'。他们的论点的总和包括“邪恶”。

我无法理解逻辑;我的新手意见是,它们是组织可重用html块的好方法,而不是必须在多个位置编辑html,我只需在必须进行更改时将其编辑为一个。

你们所有的天才都在想什么?请在Django模板中提供一些Pro和Con使用包含

3 个答案:

答案 0 :(得分:9)

这似乎有点奇怪的意见。包含是模板语言的一个完全有效的部分,从第1天开始就是如此,并且从未建议过反对或弃用AFAIK。

你的朋友可能试图说你应该更多地依赖模板继承(这是一种相反的方式)。这是正确的 - 大部分时间最好是组合覆盖或扩展父模板中定义的块的模板。但是肯定有包含的用例。

他可能会说的另一个原因是因为加载的文件系统命中包括来自磁盘的模板。在这种情况下,他肯定是不合适的 - 再次,肯定 推荐的模板继承模型将具有完全相同的命中;并且可以通过使用可选的缓存文件系统加载器来避免这两种情况。

答案 1 :(得分:3)

如丹尼尔所述,包括完全有效的原因是他提到的。因此,很难给出Pro和Con,因为它实际上取决于你想要完成的事情。

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

需要注意的一点是,include不能包含块标记,因为它们在不知道父页面的情况下自己呈现。要更好地理解这一点,请参阅template docs on includes或此(非错误)bug report中的注释。如果您发现自己需要此功能,则可能值得考虑是否应将包含的文件移动到块标记内的基本模板中。

答案 2 :(得分:2)

他可能会说你最好不要写自定义标签。所以没有:

{% 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 %}

更可重复使用。对于包含,您必须将post1和post2中的每一个重命名为“post”,然后包含模板......