python - Django 模板不存在?

标签 python python-3.x django django-templates python-2.x

我的本​​地计算机在 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/

相关文章:

python - 使用 Gmail API 从 Gmail 下载附件

python - 谷歌云存储python客户端AttributeError : 'ClientOptions' object has no attribute 'scopes' occurs after deployment

python - 删除最后一个字符在连接后循环的第一次运行中不起作用

python - Django 验证 def 不触发logging_in_success和logging_in_fail信号

python - 删除部分路径

python - Pyomo:最小化向量中的最大值

python - 如何解决运行 conda django 虚拟环境的问题?

python - 如何在 Django 中使用 AJAX 正确从 html 调用函数/url?

python - 同情集 : iterate over intervals

python - 如何使用 Homebrew 在 OS X 上安装 Python 3.3(不是 3.4)?