我有一个base.html模板,我的网站上的每个页面都会扩展。但是,从我收集的内容来看,Django要求模板应该在app目录中。从应用程序中,如何扩展我在项目的基础架构/模板/中的模板?
以下是我的目录的订购方式:
project/
|----templates/
| |----base.html
|
|----app1/
| |----templates/
| |----app1/
| |----base.html
| |----index.html
|
|----app2/...
目前,我有index.html扩展app1 / base.html:
{% extends 'welcome/base.html' %}
但是,这并不理想,因为我想扩展project / templates / base.html。从逻辑上讲,我的app1里面不应该有模板。
Settings.py:
TEMPLATE_DIRS = (
# Don't forget to use absolute paths, not relative paths.
os.path.join(PROJECT_ROOT, 'templates').replace('\\', '/'),
)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
错误是我的app1 / views.py尝试渲染时:
{% extends 'welcome/base.html' %}
答案 0 :(得分:1)
您可以使用{% extends 'base.html' %}
。所有模板目录都提供相同的命名空间。基础模板在哪个模板目录中无关紧要,唯一重要的是它与模板目录的相对路径。
这也是您应该为特定于应用的模板使用前缀的原因。如果你没有,并同时拥有project/templates/base.html
和app1/templates/base.html
,Django会将它们视为同一个文件,其中一个会覆盖另一个。
{@ 1}}设置已弃用,有利于TEMPLATE_DIRS
,如果设置后者,则会忽略TEMPLATES
。您应该将目录添加到TEMPLATE_DIRS
:
'DIRS'