一尘不染

Django TemplateDoesNotExist?

django

我的本地计算机在Ubuntu 8.10上运行Python 2.5和Nginx,并且Django是从最新的开发主干构建的。

对于我请求的每个URL,都会引发:

`TemplateDoesNotExist at /appname/path appname/template_name.html

Django tried loading these templates, in this order: * Using loader django.template.loaders.filesystem.function: * Using loader django.template.loaders.app_directories.function:`

TEMPLATE_DIRS (‘/usr/lib/python2.5/site-packages/projectname/templates’,)

在这种情况下,是否要查找/usr/lib/python2.5/site-packages/projectname/templates/appname/template_name.html?奇怪的是该文件确实存在于磁盘上。Django为什么找不到它?

我在Ubuntu 9.04上的Python 2.6的远程服务器上运行了相同的应用程序,而没有这样的问题。其他设置相同。

我的本地计算机上是否配置有任何错误,或者什么原因可能导致我应调查此类错误?

在我的settings.py中,我指定了:

SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
# Find templates in the same folder as settings.py.
TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'templates'),
)

它应该寻找以下文件:

  • /usr/lib/python2.5/site-packages/projectname/templates/appname1/template1.html
  • /usr/lib/python2.5/site-packages/projectname/templates/appname1/template2.html
  • /usr/lib/python2.5/site-packages/projectname/templates/appname2/template3.html

以上所有文件都存在于磁盘上。

解决了

经过尝试,现在可以使用:

chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*

真奇怪。我不需要在远程服务器上执行此操作即可使其正常工作。


阅读 358

收藏
2020-03-27

共1个答案

一尘不染

第一个解决方案:

这些设定

TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'templates'),
)

意味着Django将templates/在你项目的目录下查看模板。

假设你的Django项目位于,/usr/lib/python2.5/site-packages/projectname/然后使用你的设置django将在以下位置查找模板/usr/lib/python2.5/site-packages/projectname/templates/

因此,在这种情况下,我们希望将模板移动为这样的结构:

/usr/lib/python2.5/site-packages/projectname/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/templates/template3.html

第二种解决方案:

如果仍然无法正常工作,并假设你在settings.py中配置了以下应用程序:

INSTALLED_APPS = (
    'appname1',
    'appname2',
    'appname3',
)

默认情况下,Django会将模板加载到templates/每个已安装应用程序下的目录下。因此,对于你的目录结构,我们希望将模板移动如下:

/usr/lib/python2.5/site-packages/projectname/appname1/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/appname2/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/appname3/templates/template3.html

SETTINGS_PATH可能默认情况下未定义。在这种情况下,你需要定义它(在settings.py中):

import os
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
2020-03-27