我的本地机器在Ubuntu8.10上运行Python2.5和Nginx,Django是从最新的开发主干构建的.

对于我请求的每个URL,它都抛出:

TemplateDoesNotExist位于/appname/path appname/template_name.html

Djangotry 按以下顺序加载这些模板: *使用loader django.template.loaders.filesystem.function: *使用加载器django.template.loaders.app_directories.function:

模板_目录 ((‘/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/站点包/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

在我try 之后,它现在起作用了:

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

这很奇怪.我不需要在远程服务器上执行此操作即可使其工作.

推荐答案

First solution:

这些设置

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/下查找模板

因此,在这种情况下,我们希望将模板移动为如下 struct :

/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

Second solution:

如果这仍然不起作用,并且假设你已经在"设置"中配置了应用程序.就像这样:

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

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

/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__))

Django相关问答推荐

如何在REST框架中以SON格式返回错误,而不是HTML格式返回错误?

Django的update_or_create失败,尽管指定了kwargs'

构造一个定制字符串(实体、年份和字母数字的组合)作为Django中的Postgres数据库的主键是否明智?

如何在Django模板中为无效词典查找打开异常?

如何自动删除 Django 模型中的字段值?

从多个数据库访问 Django 会话

Django:使用相同的外键在不同的应用程序中 Select 多个列

如何在 Django 模板视图中显示我的数据?

django - 表单没有错误,但 form.is_valid() 没有验证

Django JSONField 过滤

具有基于类的视图的 cache_page

如何使用 django 发送 POST 请求?

如何验证对象是否存在于多线程中

Django - 如何从模型实例中获取管理员 URL

在 Django 中注册用户的最佳方法

UnicodeEncodeError:ascii编解码器无法编码字符

Django 覆盖模型 Clean() 与 Save()

Django 什么是反向关系?

如何在 django 中仅获取表的特定列?

判断列表 django 模板中是否存在