Django: 奇怪的TemplateDoesNotExist错误

1 投票
3 回答
1701 浏览
提问于 2025-04-18 02:32

我在使用Django 1.6.2的时候遇到了一个“TemplateDoesNotExist at /”的错误。这个问题在Stackoverflow上讨论过很多次,但到现在为止都没有解决。

我的模板文件放在一个单独的文件夹里,并没有存放在应用程序里面。

manage.py
project_dir
|_ settings.py
|_ urls.py
|_ apps
    \_ app1
        \_ views.py
        |_ urls.py
        |_ models.py
|_ templates
    \_ base.html
    \_ pages
         \_ index.html

我已经设置了TEMPLATE_DIRTEMPLATE_LOADERS,具体如下:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(os.path.join(BASE_DIR, 'project/apps/'))
TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'project/templates/'),
)
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
)

当我打印TEMPLATE_DIRSBASE_DIR的内容时,它们看起来都没问题。
而且当我把TEMPLATE_DIRS的打印结果复制到浏览器里直接查看时,我可以看到模板文件。

我注意到一个奇怪的地方,就是加载器django.template.loaders.filesystem.Loader在错误信息里没有列出任何文件夹,而django.template.loaders.app_directories.Loader却列出了一些和应用程序相关的文件夹。

这个模板是通过urls.py来调用的。

from django.views.generic.base import TemplateView
...
urlpatterns = patterns('',
    url(r'^$', TemplateView.as_view(template_name='app1/index.html'), name='index'),
    ...
) 

这个模板错误的原因是什么呢?

3 个回答

0

你能再加一些东西吗?我想看看你整个目录的结构,包括你的 settings.py 文件在哪里。我担心你的 BASE_DIR 或者 TEMPLATE_DIRS 设置可能不对。我觉得 TEMPLATE_DIRS 应该只是 'templates',而不是 'project/templates',不过在你的设置下也可能是可以工作的。

如果不是这个问题,你能把你的 views.py 文件和你想调用的模板代码发上来吗?

3

我在文件结构中找不到“app1/index.html”。

根据提供的信息,它应该是这样的:

url(r'^$', TemplateView.as_view(template_name='pages/index.html'), name='index'),
1

哎呀,这个错误真让人无奈!我刚刚又仔细看了一遍我的 settings.py 文件,发现里面有第二个 TEMPLATE_DIRS 的定义。这导致之前设置的所有目录都被覆盖了,也就解释了为什么 django.template.loaders.app_directories.Loader 是空的。

撰写回答