我目前只是将应用程序添加到INSTALLED_APPS以便能够使用该应用程序中的模板,但还有TEMPLATE_DIRS设置。我什么时候更喜欢TEMPLATE_DIRS而不是INSTALLED_APPS?
答案 0 :(得分:7)
您可以使用TEMPLATE_DIRS中的模板覆盖来自应用的模板(通过赋予它们相同的名称),或者使用与多个应用相关的模板(想到base.html)。
这是因为在TEMPLATE_LOADERS(app_directories之前的文件系统)中设置模板加载器的顺序。
以下列方式组织模板是个好主意,以避免名称冲突:
<project>/
<app1>/templates/<app1>/
foo.html
bar.html
<app2>/templates/<app2>/
foo.html
templates/
<app1>/
foo.html
base.html
xyzzy.html
答案 1 :(得分: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"),
)