3

我目前遇到了 django 模板的问题。我基本上有3个模板文件:

  • 根据
  • 故事列表
  • 故事细节

Story_list 和 _detail 扩展了 Base,效果很好。但是,list 和 detail 共享一些代码,这些代码扩展了我的侧边栏的基本模板。我基本上在两个模板中重复了一大段代码,而我的程序员说那是错误的。必须有更好的方法,我敢肯定。我试过包含,但是我在包含的文件中有:

{% block item %}
    content stuff
{% endblock %}

大约3个街区。问题是这些都没有被拾取/渲染。如果我将文件包含在扩展 base 的块部分中,那么它会正确转储所有内容,但如果我不将它包含在块中,我什么也得不到。SSI是要走的路吗?我玩弄了它,但这似乎也不能正常工作。任何帮助表示赞赏。

4

4 回答 4

16

一般来说,使用includes 不是 Django 模板的答案。让我从几个方面回答你的问题。

首先,让我谈谈侧边栏。

  • 几乎所有常见页面都将使用该侧边栏吗?把它放进去Base。不要覆盖那些侧边栏块(即根本不要在Story_*模板中编写它们)。

  • Story_*这个侧边栏是模板独有的吗?制作另一个模板,比如说,Story_base然后扩展它。这类似于在 Java 中创建抽象超类。(答案在我的脑海中,但措辞被无情地从 jpwatts 中扯下来。)

接下来,让我解决模板继承问题。假设您有一个名为Story_listextends的模板Base。此时,刚放完之后{% extends "Base" %}Story_list 就是 Base。您输入的任何其他内容都将Story_list被忽略,因为模板已经完成。您现在唯一能做的就是覆盖已在Base.

最后,让我谈谈includes。尽量避免它们。其他模板引擎,例如 PHP,似乎鼓励使用includes。但是,从长远来看,这可能会导致难以管理的模板。查看包含的片段并立即确定其在模板层次结构中的位置稍微困难一些。它们也更难重构到模板层次结构中,特别是如果您将它们包含在多个级别(一次在 中Base,两次在 中Story_base,一次在某些中Story_*,等等)。

于 2009-05-11T19:11:25.103 回答
6

如果故事模板之间存在站点范围内不需要的通用代码,我会创建一个story_base(扩展原始的base)并让我的故事模板扩展它。

于 2009-05-11T18:58:14.593 回答
0
{% include xxx.html %}

这个标签有效。

另一种方法是使用过滤器。过滤器调用一个函数进行渲染,模板可以在渲染时使用。

于 2013-01-20T13:33:27.087 回答
0

你有一个{% include %}标签。

于 2009-05-11T19:07:32.457 回答