首页 文章

Django 1.8忽略了DIRS,找不到模板

提问于
浏览
2

这是settings.py中的TEMPLATES部分:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.debug',
                'django.template.context_processors.i18n',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

我在应用程序目录中使用模板,它的工作原理 . 但每当我尝试使用布局从全局模板目录(os.path.join(BASE_DIR,'templates')扩展它时,我测试过),django会引发TemplateDoesNotExist错误 . 这是Template-loader postmortem,它不包括我的DIRS目录:

Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
Using loader django.template.loaders.app_directories.Loader:
/usr/local/lib/python2.7/dist-packages/django/contrib/admin/templates/layouts/default.html (File does not exist)
/usr/local/lib/python2.7/dist-packages/django/contrib/auth/templates/layouts/default.html (File does not exist)
/home/foundation/public/foundation/foundation/event_request/templates/layouts/default.html (File does not exist)

**更新:**似乎apache加载django 1.5而不是django 1.8 . 这可能是个问题 .

3 回答

  • 1

    登录后

    使用loader django.template.loaders.filesystem.Loader:

    loader应该打印它试图找到你的模板的所有可能的位置,就像它是从 app_directories loader的类似日志之后 . 如果此处没有路径,请仔细检查 TEMPLATES 设置是否已正确定义,是否在以后的设置或其他文件中被覆盖,以及Django是否正确加载该设置文件 .

    DEBUG 设置为 True 时,您可以抛出一些异常来获取500服务器错误,在错误页面上,您将获得Django看到的所有设置的方便列表 .

    另外检查您的WSGI服务器是否正在加载正确版本的django,旧版本没有 TEMPLATE 设置(它在多个设置之间分割) .

  • 0

    问题与错误的virtualenv和实际使用Django 1.5.1而不是1.8有关 . 我将保存这篇文章,也许这将有助于将来遇到类似问题的人 .

  • -2

    我认为你使用太难的方式来定义模板路径 . Django说的有点:

    import os
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]
    

相关问题