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 。