Django 中所有应用程序的基本模板
Posted
技术标签:
【中文标题】Django 中所有应用程序的基本模板【英文标题】:Base template for all apps in Django 【发布时间】:2015-06-12 02:39:15 【问题描述】:我有一个包含 2 个应用程序的项目
project/
blog/
templates/
index.html
polls/
templates/
index.html
project/
templates/
base.html
index.html
现在我希望这两个应用程序扩展项目base.html
。这是要走的路吗?这怎么可能?有更好的解决方案吗?
已经有一个问题正在处理这个问题,但只有在您不使用拆分目录时才值得一提: Django project base template
tl;dr:我想使用拆分目录并想知道如何从多个应用程序扩展基本模板而不将其复制到每个应用程序
【问题讨论】:
已回复here 【参考方案1】:在当前的 Django (1.10) TEMPLATE_DIRS is deprecated,所以:
-
在项目根目录下添加
templates
目录,
在 settings.py 中找到 TEMPLATES -> DIRS 并像这样添加它:
TEMPLATES = [
...
'DIRS': [(os.path.join(BASE_DIR, 'templates')),],
...
将 base.html 添加到该目录。
使用% extends 'base.html' %
将其扩展到任何你想要的地方
【讨论】:
感谢您的提示!不确定何时更改,但BASE_DIR
是pathlib.Path
对象,因此您可以编写BASE_DIR / "templates"
而不是使用os.path.join
。【参考方案2】:
-
在项目根目录下添加
templates
目录,并将其添加到您的TEMPLATE_DIRS
设置中。
将 base.html 添加到该目录。
使用% extends 'base.html' %
将其扩展到任何你想要的地方
【讨论】:
我已经完成了,我的设置如下所示:TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates/'),)
但这仍然不起作用
去掉正斜杠。【参考方案3】:
对于 1.8 以上的 Django 版本,upgrade doc 建议将原版设置(对于像我这样的大多数非高级 django 探戈者)添加到您的 settings.py 中:
TEMPLATES = [
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [(os.path.join(BASE_DIR, 'my_Templates_Directory')),],
'APP_DIRS': True,
'OPTIONS':
'context_processors': [
# Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
# list if you haven't customized them:
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
],
,
,
]
BACKEND 和 OPTIONS 都是必需的,否则我会遇到与“INVALID BACKEND”相关的错误,并且“django.contrib.auth.context_processors.auth”必须在 TEMPLATES 中。
【讨论】:
以上是关于Django 中所有应用程序的基本模板的主要内容,如果未能解决你的问题,请参考以下文章