我的本地机器在Ubuntu8.10上运行Python2.5和Nginx,Django是从最新的开发主干构建的
对于我请求的每个URL,它都会抛出:
TemplateDoesNotExist位于/appname/path appname/template_name.html
Django尝试按以下顺序加载这些模板:
*使用loader django.template.loaders.filesystem.function:
*使用loader django.template.loaders.app_directories.function:模板目录
(’/usr/lib/python2.5/site packages/projectname/templates’,)
在这种情况下,它是否在寻找/usr/lib/python2.5/site packages/projectname/templates/appname/template\u name.html?奇怪的是这个文件确实存在于磁盘上。为什么Django找不到它
我在Ubuntu 9.04上使用Python2.6在远程服务器上运行了相同的应用程序,没有出现这样的问题。其他设置相同
在我的本地机器上是否存在任何错误配置,或者是什么可能导致我应该调查的此类错误
在mysettings.py中,我指定了:
SETTINGS\u PATH=os.PATH.normpath(os.PATH.dirname(\uu文件\uu))
#在与settings.py相同的文件夹中查找模板。
模板目录=(
join(设置\路径“模板”),
)
它应该查找以下文件:
- /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/*
真奇怪。我不需要在远程服务器上执行此操作即可使其正常工作
第一个解决方案:
这些设置
模板目录=(
join(设置\路径“模板”),
)
这意味着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中配置了应用程序,如下所示:
已安装的应用程序=(
“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.py中):
导入操作系统
设置\路径=os.PATH.dirname(os.PATH.dirname(\文件\文件))