我的本地计算机在 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/*
这很奇怪。我不需要在远程服务器上执行此操作即可使其正常工作。
最佳答案
第一个解决方案:
这些设置
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__))
关于python - Django 模板不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1926049/