在Django中启用应用模板覆盖?
我正在写一个简单的网站,用来展示一些数据的统计信息。我有一个叫“stats”的应用,我想为它写一些默认的模板(也就是在stats/templates/stats这个地方),但是我希望这些模板可以被覆盖,就像管理员应用的模板那样。也就是说,如果我在项目的模板目录里放一个stats/view.html文件,它应该优先使用这个文件,而不是使用应用目录里的那个。我现在还不太明白该怎么做。怎样才能让Django在查找模板时,先看项目的TEMPLATE_DIRS,然后再去找应用里的模板呢?
补充:我找到了问题所在,看到有人用os模块设置模板目录的教程。他们写的是:
TEMPLATE_DIRS = (
os.path.join(os.path.basename(__file__), 'templates')
)
其实应该是:
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates')
)
1 个回答
2
你需要把 filesystem
加载器放在 app_directories
加载器的前面,这样才能在你的 TEMPLATE_LOADERS
设置中正常工作。
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source'
)
在 TEMPLATE_LOADERS
中,加载器的顺序是很重要的。