Python Django:扩展覆盖的模板
我的设置中有两个应用程序。已安装的应用程序:Python Django:扩展覆盖的模板,python,django,django-templates,modularity,django-apps,Python,Django,Django Templates,Modularity,Django Apps,我的设置中有两个应用程序。已安装的应用程序: INSTALLED_APPS = [ 'application2', 'application1' ] 并希望application2从application1更改模板(例如,通过添加按钮) 如何在不覆盖整个模板的情况下实现这一点 注意 问题是这两个模板具有相同的名称(“mytemplate.html”)和相同的文件夹名称(“application1”): 所以我不能写: {% extends "application1\mytem
INSTALLED_APPS = [
'application2',
'application1'
]
并希望application2从application1更改模板(例如,通过添加按钮)
如何在不覆盖整个模板的情况下实现这一点
注意
问题是这两个模板具有相同的名称(“mytemplate.html”)和相同的文件夹名称(“application1”): 所以我不能写:
{% extends "application1\mytemplate.html" %}
因为两个模板都命名为“application1\mytemplate.html”。我认为这是不可能的,除非您有不同的模板名称,否则您可以使用{{block.super} 一旦加载器找到正确的文件,它就不会再进一步查看,所以您无法访问新模板中的重写模板
模板实际上并不属于应用程序。如果您愿意,可以将它们分组到应用程序目录中,但它们基本上是独立的
重写模板的一部分(无论应用程序提供了什么)的方法是使用
{%extends'template\u name.html%}
从模板继承,然后定义需要重写的块。当然,这意味着父模板需要已经定义了这些块,否则需要覆盖已定义的最小相关块,然后围绕需要更改的位重复一些内容。我认为这不可能适用于您描述的情况,因为这意味着安装的应用程序顺序很重要。事实上:
安装的应用程序的顺序并不重要,但我们喜欢按字母顺序排列,这样便于人们阅读
我知道这不是官方文件。然而,这本书是由阿德里安·霍洛瓦蒂和雅各布·卡普兰·莫斯(Django的创作者)写的,所以我会相信他们的话
但如果你仔细想想,你就会明白为什么订购不是一个好主意:
它只在特定的简单情况下有用。在稍微复杂一点的情况下,这也无济于事。例如:
- 您有
,app1
,app2
app3
和app2
扩展/覆盖模板app3
和app1/a.html
app1/b.html
- 您希望使用
中定义的app2
和a.html
中定义的app3
李>b.html
{% extends "application1\mytemplate.html" %}