Django: TEMPLATE_DIRS与INSTALLED_APPS

3 投票
2 回答
1714 浏览
提问于 2025-04-16 04:53

我现在只是把应用程序添加到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

撰写回答