Django:TEMPLATE_DIRS与INSTALLED_APPS

时间:2010-10-02 14:22:07

标签: python django

我目前只是将应用程序添加到INSTALLED_APPS以便能够使用该应用程序中的模板,但还有TEMPLATE_DIRS设置。我什么时候更喜欢TEMPLATE_DIRS而不是INSTALLED_APPS?

2 个答案:

答案 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"),
)