在Django中启用应用模板覆盖?

1 投票
1 回答
661 浏览
提问于 2025-04-15 18:23

我正在写一个简单的网站,用来展示一些数据的统计信息。我有一个叫“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 中,加载器的顺序是很重要的。

撰写回答