2

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

更新

现在我在django-admintools-bootstrapDjango 1.5.1. admin_tools之前在 in中添加过INSTALLED_APPS,但是没有效果。它也不会为django-admintools-bootstrap. 在使用这两个包和 Django 1.4 的其他类似项目中,一切正常。此外,我检查了 Django 1.5 的发行说明以了解模板查找顺序的更改,但没有发现任何相关信息。

4

2 回答 2

9

更新的答案:

从 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,
        },
    },
]

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

  • 本质上最重要的地方是loaders选项OPTIONS。如果已定义,则它要求APP_DIRS未设置并遵循此处的任何显式顺序。

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

  • 如果没有加载器,并且APP_DIRS已定义,则它们的优先级高于DIRS.

以上没有明确记录,但可以很容易地从现有文档中推断出来,并且可能经过一些实验。

于 2016-03-30T14:57:33.047 回答
3

如果它们不在应用程序模板目录中,请在TEMPLATE_DIRS设置中添加模板目录的绝对路径。这些目录会按顺序搜索,所以在前面加上。

如果它们在应用程序目录中,您可能希望'django.template.loaders.app_directories.Loader'在设置中领先于任何人TEMPLATE_LOADERS

此外,请检查您在指定模板时如何使用模板名称。你应该使用 as 'floppyforms/layouts/bootstrap/template1.html'

模板加载器的更多信息

于 2013-08-03T05:29:14.097 回答