我的本地机器在 Ubuntu 8.10 上运行 Python 2.5 和 Nginx,Django 是从最新的开发主干构建的。
对于我请求的每个 URL,它都会抛出:
TemplateDoesNotExist 在 /appname/path appname/template_name.html
Django 尝试按以下顺序加载这些模板: * 使用加载程序 django.template.loaders.filesystem.function: * 使用加载程序 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/*
真奇怪。我不需要在远程服务器上执行此操作即可使其正常工作。
原文由 jack 发布,翻译遵循 CC BY-SA 4.0 许可协议
第一个解决方案:
这些设置
意味着 Django 将查看您项目下
templates/
目录中的模板。假设您的 Django 项目位于
/usr/lib/python2.5/site-packages/projectname/
然后使用您的设置 django 将在/usr/lib/python2.5/site-packages/projectname/templates/
下查找模板因此,在这种情况下,我们希望将模板移动为如下结构:
第二种解决方案:
如果这仍然不起作用并假设您在 settings.py 中配置了应用程序,如下所示:
默认情况下,Django 会在每个安装的应用程序下加载
templates/
目录下的模板。因此,对于您的目录结构,我们希望将我们的模板移动为如下所示:SETTINGS_PATH
默认可能没有定义。在这种情况下,您需要定义它(在 settings.py 中):