目前我在使用 Django 模板时遇到问题。我基本上有 3 个模板文件:
- 基地
- 故事列表
- 故事详情
Story_list 和 _detail 扩展了 Base,而且工作得很好。但是,list 和 detail 共享一些代码,这些代码扩展了我的侧边栏的基本模板。我基本上是在两个模板中重复一段代码,而我的程序员说那是错误的。必须有更好的方法,我敢肯定。我试过包含,但是我在包含的文件中有:
{% block item %}
content stuff
{% endblock %}
大约 3 个街区。问题是这些都没有被拾取/渲染。如果我将文件包含在扩展 base 的 block 部分中,那么它会正确转储所有内容,但如果我不将它包含在 block 中,我将一无所获。 SSI 是正确的选择吗?我玩过那个,但它似乎也不能正常工作。感谢您的帮助。
最佳答案
通常,使用 include
不是 Django 模板的答案。让我从几个方面回答你的问题。
首先,让我谈谈侧边栏。
几乎所有常用页面都将使用该侧边栏吗?将其放在
Base
中。不要覆盖那些侧边栏 block (即根本不要将它们写在您的Story_*
模板中)。这个侧边栏是
Story_*
模板独有的吗? 创建另一个名为Story_base
的模板并扩展它。这类似于在 Java 中创建抽象父类(super class)。 (答案在我的脑海里,但措辞是来自 jpwatts 的无情 ripped off。)
接下来,让我来谈谈模板继承。假设您有一个名为 Story_list
的模板,它扩展了 Base
。此时,在刚刚放入{% extends "Base"%}
之后,Story_list
就是Base
。您放入 Story_list
中的任何其他内容都将被忽略,因为模板已经完成。您现在唯一可以做的就是覆盖 Base
中定义的 block 。
最后,让我谈谈include
。尽量避免它们。其他模板引擎,例如 PHP,似乎鼓励使用 include
。但是,从长远来看,这可能会导致模板难以管理。浏览包含的片段并立即确定其在模板层次结构中的位置稍微困难一些。它们也更难重构到模板层次结构中,尤其是当您将它们包含在多个级别时(一次在 Base
中,两次在 Story_base
中,一次在某些 Story_*
等)。
关于python - django 模板包括,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849463/