django包含来自另一个应用程序的模板

时间:2010-12-31 18:27:45

标签: django templates

在设置我的项目并努力保持应用程序不依赖时,我遇到了麻烦。我希望来自不同应用程序的所有模板都具有一致的页眉和页脚。这是我正在尝试的:

myproject/
         base/
             templates/
                      header.html
                      footer.html
         app1/
             templates/
                      my_app1_page.html -> want to include 'header.html'
                                           and 'footer.html' from base app

假装还有更多应用也希望这样做。这是可能的和/或正确的方法吗?

2 个答案:

答案 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模板系统的非常好的东西之一,只要有意义(大部分时间)就选择继承而不是包含。

我的建议:

  • 为您的项目创建一个基本模板(“base.html”是默认约定),页眉和页脚以及主要内容的{%block content%}
  • 让您的其他模板继承base.html {% extends "base.html" %}并覆盖内容部分

有关此文档的链接

,请参阅此问题的其他回复

答案 1 :(得分:9)

虽然您可以通过使用include tag并指定绝对路径来实现这一点,但在Django中使用的正确方法是使用Template inheritance