在设置我的项目并努力保持应用程序不依赖时,我遇到了麻烦。我希望来自不同应用程序的所有模板都具有一致的页眉和页脚。这是我正在尝试的:
myproject/
base/
templates/
header.html
footer.html
app1/
templates/
my_app1_page.html -> want to include 'header.html'
and 'footer.html' from base app
假装还有更多应用也希望这样做。这是可能的和/或正确的方法吗?
答案 0 :(得分:89)
只要应用程序处于INSTALLED_APPS并且启用了应用程序目录的模板加载程序,您就可以包含来自其他应用程序的任何模板,即:
{% include "header.html" %}
...因为您的模板直接位于应用的模板目录中。 通常,为了避免名称冲突,最好使用:
app1/
templates/
app1/
page1.html
page2.html
app2/
templates/
app2/
page1.html
page2.html
{% include "app1/page1.html" %}
或{% include "app2/page1.html" %}
...
但是:为了保持一致的外观和感觉,使用模板继承而不是包含更好。模板继承是Django模板系统的非常好的东西之一,只要有意义(大部分时间)就选择继承而不是包含。
我的建议:
{%block content%}
。{% extends "base.html" %}
并覆盖内容部分有关此文档的链接
,请参阅此问题的其他回复答案 1 :(得分:9)
虽然您可以通过使用include tag并指定绝对路径来实现这一点,但在Django中使用的正确方法是使用Template inheritance。