Django: 奇怪的TemplateDoesNotExist错误
我在使用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_DIR
和TEMPLATE_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_DIRS
和BASE_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 个回答
你能再加一些东西吗?我想看看你整个目录的结构,包括你的 settings.py
文件在哪里。我担心你的 BASE_DIR
或者 TEMPLATE_DIRS
设置可能不对。我觉得 TEMPLATE_DIRS
应该只是 'templates'
,而不是 'project/templates'
,不过在你的设置下也可能是可以工作的。
如果不是这个问题,你能把你的 views.py
文件和你想调用的模板代码发上来吗?
我在文件结构中找不到“app1/index.html”。
根据提供的信息,它应该是这样的:
url(r'^$', TemplateView.as_view(template_name='pages/index.html'), name='index'),
哎呀,这个错误真让人无奈!我刚刚又仔细看了一遍我的 settings.py
文件,发现里面有第二个 TEMPLATE_DIRS
的定义。这导致之前设置的所有目录都被覆盖了,也就解释了为什么 django.template.loaders.app_directories.Loader
是空的。