Django 1.8 忽略 DIRS,找不到模板

Posted

技术标签:

【中文标题】Django 1.8 忽略 DIRS,找不到模板【英文标题】:Django 1.8 ignores DIRS, cannot find templates 【发布时间】:2015-12-27 23:55:01 【问题描述】:

这是我在 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 错误。这是模板加载器事后分析,其中不包括我的 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。这可能是个问题。

【问题讨论】:

你是如何定义 BASE_DIR 的? BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(file))) 是否需要是完整的目录路径而不是路径片段? 完整路径。这里的 TEMPLATE 结构看起来像运行时: TEMPLATES ['APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/home/foundation/public/foundation/templates' ],[...] 对我来说更有趣的是目录没有在 Template-loader postmortem 中列出。 【参考方案1】:

登录后

使用加载器 django.template.loaders.filesystem.Loader:

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

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

还要检查你的 WSGI 服务器是否加载了正确版本的 django,旧版本没有 TEMPLATE 设置(它被分成多个设置)。

【讨论】:

根据您的更新,在 django 1.5 中没有 TEMPLATES 设置。在 Apache 中为您的 WSGI 指定一些 virtualenv,这将解决问题。【参考方案2】:

问题与错误的 virtualenv 和实际使用 Django 1.5.1 而不是 1.8 有关。我会保存这篇文章,也许它会对将来有类似问题的人有所帮助。

【讨论】:

以上是关于Django 1.8 忽略 DIRS,找不到模板的主要内容,如果未能解决你的问题,请参考以下文章

django 中settings.py 默认没有 TEMPLATE_DIR 这个 ,我自己加上去 也是找不到模板

Django1.6踩到的坑

Django 找不到模版报错" django.template.exceptions.TemplateDoesNotExist: index.html"

Django - 找不到静态文件

找不到页面的Django静态CSS(开发)

Django 找不到应用模板