我的本地机器在Ubuntu 8.10上运行Python 2.5和Nginx,Django从最新的开发中继构建 .
对于我请求的每个URL,它会抛出:
TemplateDoesNotExist at / appname / path appname / template_name.html Django尝试按以下顺序加载这些模板:*使用loader django.template.loaders.filesystem.function:*使用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
-
......
以上所有文件都存在于磁盘上 .
Solved
它在我尝试后现在有效:
chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*
真奇怪 . 我不需要在远程服务器上执行此操作以使其工作 .
15 回答
First solution :
这些设置
意味着Django将查看项目下
templates/
目录中的模板 .假设您的Django项目位于
/usr/lib/python2.5/site-packages/projectname/
然后使用您的设置,django将在/usr/lib/python2.5/site-packages/projectname/templates/
下查找模板因此,在这种情况下,我们希望将模板的结构设置为:
Second solution :
如果仍然无效,并假设您在settings.py中配置了这样的应用:
默认情况下,Django会在每个已安装的应用程序下的
templates/
目录下加载模板 . 因此,对于您的目录结构,我们希望将模板移动为:希望有所帮助 .
默认情况下可能未定义
SETTINGS_PATH
. 在这种情况下,您需要定义它(在settings.py中):如果从头开始添加
app
时遇到此问题 . 这可能是因为你错过了一些settings
. 添加app
时需要三个步骤 .1,创建目录和模板文件 .
假设您有一个名为
mysite
的项目,并且要添加名为your_app_name
的app
. 将模板文件放在mysite/your_app_name/templates/your_app_name
下,如下所示 .2,将您的应用添加到INSTALLED_APPS .
修改
settings.py
3,在TEMPLATES中将您的应用目录添加到DIRS .
修改
settings.py
.在设置.py remove TEMPLATE_LOADERS和TEMPLATE DIRS然后 ADD
Django
TemplateDoesNotExist
错误意味着框架无法找到模板文件 .要使用模板加载API,您需要告诉框架存储模板的位置 . 执行此操作的位置在
TEMPLATE_DIRS
设置的设置文件(settings.py
)中 . 默认情况下,'s an empty tuple, so this setting tells Django'的模板加载机制在哪里查找模板 .选择您要存储模板的目录并将其添加到TEMPLATE_DIRS,例如:
我尝试后现在可以使用了
真奇怪 . 我不需要在远程服务器上执行此操作以使其工作 .
此外,我必须在本地计算机上运行以下命令以使所有静态文件都可访问,但在远程服务器上它们都是“root:root” .
本地机器在Ubuntu 8.04桌面版上运行 . 远程服务器在Ubuntu 9.04服务器版上 .
谁知道为什么?
大家好我找到了新的解决方案 . 实际上它是在另一个模板中定义的,所以不要自己定义TEMPLATE_DIRS,而是将目录路径名放在:
只是预感,但请查看this article on Django template loading . 特别是,请确保您的TEMPLATE_LOADERS列表中包含
django.template.loaders.app_directories.Loader
.看看django试图在错误页面中加载模板看
Template-loader postmortem
的文件夹,例如,错误会像这样:在我的错误
vcsrc\vcsrc\templates\base.html
不在路径中 .然后将
setting.py
文件中的TEMPLATES
更改为模板路径使用ls -l检查模板和appname目录的权限,或尝试从django执行绝对路径open() .
我必须使用内部APP的模板,它适用于我:
我很尴尬承认这一点,但问题是我的模板被指定为
….hml
而不是….html
. 小心!对于django 1.9版,我补充道
在settings.py中的模板块行,它运行良好
我有一个令人尴尬的问题......
我收到此错误是因为我急于忘记将应用程序放在
INSTALLED_APPS
中 . 你会认为Django会提出更具描述性的内容错误 .找到这个元组:
您需要将'DIRS'添加到字符串中
所以你需要:
检查您的templates.html是否在
/usr/lib/python2.5/site-packages/projectname/templates
dir中 .