目前我的django模板存在问题。我基本上有3个模板文件:
Story_list和_detail扩展Base,完美无缺。但是,列表和详细信息共享一些扩展我的侧边栏基本模板的代码。我基本上在两个模板中重复了一大堆代码,而我的程序员说这是错的。必须有一个更好的方法,我很确定。我已尝试过包含,但是我已经在包含的文件中:
{% block item %}
content stuff
{% endblock %}
大约3个街区。问题是没有一个被拾取/渲染。如果我将文件包含在扩展base的块部分中,那么它会正确地转储所有内容,但是如果我不将它包含在块中,我什么也得不到。 SSI是可行的吗?我玩弄了这个,但这似乎也没有正常工作。任何帮助表示赞赏。
答案 0 :(得分:16)
通常,使用include
s不是Django模板的答案。让我在几个方面回答你的问题。
首先,让我解决侧栏问题。
几乎所有常见页面都会使用该侧边栏吗?将其放入Base
。不要覆盖这些侧边栏(即不要在Story_*
模板中完全写入)。
此侧边栏是否为Story_*
模板独有?创建另一个名为Story_base
的模板并对其进行扩展。这类似于在Java中创建抽象超类。 (答案在我脑海中,但是jpwatts的措辞是ripped off。
接下来,让我解决模板继承问题。假设您有一个名为Story_list
的模板,其扩展名为Base
。此时,在刚刚提出{% extends "Base" %}
后,Story_list
正好是 Base
。您放入Story_list
的任何其他内容都会被忽略,因为该模板已经完成。您现在唯一能做的就是在Base
中定义的覆盖块。
最后,让我谈谈include
。尽量避免使用它们。其他模板引擎,如PHP,似乎鼓励使用include
。但是,从长远来看,这可能会导致模板的可管理性降低。稍微查看包含的代码段并立即确定其在模板层次结构中的位置会稍微困难一些。它们也很难重构到模板层次结构中,特别是如果您将它们包含在多个级别中(一次在Base
中,两次在Story_base
中,一次在Story_*
中等等。 )。
答案 1 :(得分:6)
如果在网站范围内不需要的故事模板之间存在公共代码,我会创建一个story_base
(扩展原始base
)并让我的故事模板扩展该范围。< / p>
答案 2 :(得分:0)
你有一个{% include %}标签。
答案 3 :(得分:0)
{% include xxx.html %}
此标记有效。
另一种方法是使用过滤器。 Filter调用一个渲染函数,渲染时可以使用模板。