Django: TEMPLATE_DIRS与INSTALLED_APPS
我现在只是把应用程序添加到INSTALLED_APPS里,这样就可以使用那个应用里的模板了。但是还有一个设置叫做TEMPLATE_DIRS。我什么时候应该选择使用TEMPLATE_DIRS,而不是INSTALLED_APPS呢?
2 个回答
0
你还需要定义这个 TEMPLATE_DIRS,才能覆盖外部模块的模板。
如果你的模板文件夹按照 hop 在之前的回答中推荐的方式放置,你可以这样定义 TEMPLATE_DIRS,让它更方便移动:
import os
cwd = os.path.dirname(os.path.abspath(__file__))
PROJECT_ROOT = cwd[:-9]
# other code comes here ...
TEMPLATE_DIRS = (
os.path.join(PROJECT_ROOT, "templates"),
)
7
你可以在 TEMPLATE_DIRS 中使用模板,这样可以覆盖来自应用的模板(只要给它们起相同的名字),或者用于多个应用都需要的模板(比如 base.html)。
之所以能这样做,是因为模板加载器的顺序在 TEMPLATE_LOADERS 中是先检查文件系统的模板,再检查应用目录中的模板。
为了避免名字冲突,最好按照以下方式组织你的模板:
<project>/
<app1>/templates/<app1>/
foo.html
bar.html
<app2>/templates/<app2>/
foo.html
templates/
<app1>/
foo.html
base.html
xyzzy.html