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

在设置我的项目并努力保持应用程序不依赖的时候,我遇到了一些障碍。 我希望来自不同应用的所有模板都具有一致的页眉和页脚。 这就是我想要的:

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

假设还有更多的应用程序想要这样做。 这是可能的和/或正确的方法来做到这一点?

只要应用程序在INSTALLED_APPS中,并且应用程序dirs的模板加载器已启用,则可以包含来自其他应用程序的任何模板,即:

 {% 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" %}

但是 :为了保持一致的外观和感觉,使用模板inheritance而不是包含是非常好的。 模板inheritance是Django模板系统的真正优点之一,只要有意义(大部分时间),就selectinheritance。

我的build议是:

  • 为您的项目使用基本模板(“base.html”是默认约定),包含页眉和页脚以及用于主内容的{%block content%}
  • 让您的其他模板以base.html {% extends "base.html" %}formsinheritance,并覆盖内容部分

请参阅对此问题的另一个回复链接到文档

尽pipe你可以通过使用include标签和指定绝对path来做到这一点,但在Django中正确的工作方式是使用Templateinheritance 。