Django模板查找顺序

时间:2013-08-03 05:17:51

标签: django templates path django-floppyforms

我正在编写一个使用django-floppyforms的应用。此外,我的应用程序提供默认的twitter bootstrap皮肤,所以我在我的应用程序中定制了floppyforms模板,使它们成为引导程序。我将floppyforms/{layouts, rows}/bootstrap放入我的应用程序的模板目录中。但它不起作用:django不会使用它们。因此,我不想强​​制最终用户将自定义模板放入他的项目中,事实上,我想指出django在呈现应用内内容时使用我的本地floppyforms模板。我只想让我的应用程序独立,没有任何不方便的依赖。

更新

现在我遇到与django-admintools-bootstrapDjango 1.5.1类似的问题。它是在admin_tools INSTALLED_APPS之前添加的,但没有效果。此外,它不会收集django-admintools-bootstrap的静态内容。在使用这两个软件包和Django 1.4的其他类似项目中,一切正常。此外,我已经检查了Django 1.5的发布说明,以了解模板查找顺序的变化,但没有发现它。

2 个答案:

答案 0 :(得分:7)

更新回答:

自Django 1.8起,TEMPLATE_DIRSTEMPLATE_LOADERS已被弃用,由TEMPLATES取代。

TEMPLATES的示例可以是:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            # 'loaders': [
            #     'django.template.loaders.filesystem.Loader',
            #     'django.template.loaders.app_directories.Loader',
            # ],
            'debug': True,
        },
    },
]

模板查找顺序由以下内容决定:

  • 基本上最重要的地方是loadersOPTIONS选项。如果已定义,则需要设置APP_DIRS并遵循任何明确的顺序。

  • 如果没有加载器,并且定义了DIRS,则这些加载器优先于filesystem加载器。

  • 如果没有加载者,并且APP_DIRS已定义,则这些加载者优先于DIRS

以上内容未明确记录,但可以通过现有文档轻松扣除,也许可以在一些实验后进行。

答案 1 :(得分:3)

如果它们不在应用模板目录中,请在TEMPLATE_DIRS设置中添加模板目录的绝对路径。 将按顺序搜索这些目录,因此请将它们添加到前面。

如果他们在应用目录中,您可能希望将'django.template.loaders.app_directories.Loader'置于TEMPLATE_LOADERS设置中的任何人之前。

另外,在指定模板时,请检查模板名称的使用方式。您应该使用'floppyforms/layouts/bootstrap/template1.html'

template loaders

的更多信息