Django,TemplateDoesNotExist 错误:Heroku 找不到模板目录。如何显示它在哪里看?
Posted
技术标签:
【中文标题】Django,TemplateDoesNotExist 错误:Heroku 找不到模板目录。如何显示它在哪里看?【英文标题】:Django, TemplateDoesNotExist error: Heroku can't find template directory. How to show it where to look? 【发布时间】:2013-02-06 02:57:06 【问题描述】:我已经做了很多点击和同步数据库操作,但还没有找到解决方案。我收到此错误:
TemplateDoesNotExist at /quotes/
quotes/index.html
Request Method: GET
Request URL: http://quoteboard94.herokuapp.com/quotes/
Django Version: 1.4.4
Exception Type: TemplateDoesNotExist
Exception Value:
quotes/index.html
Exception Location: /app/.heroku/python/lib/python2.7/site-packages/django/template/loader.py in find_template, line 138
Python Executable: /app/.heroku/python/bin/python
Python Version: 2.7.3
Python Path:
['/app',
'/app/.heroku/python/lib/python2.7/site-packages/pip-1.1-py2.7.egg',
'/app',
'/app/.heroku/python/lib/python27.zip',
'/app/.heroku/python/lib/python2.7',
'/app/.heroku/python/lib/python2.7/plat-linux2',
'/app/.heroku/python/lib/python2.7/lib-tk',
'/app/.heroku/python/lib/python2.7/lib-old',
'/app/.heroku/python/lib/python2.7/lib-dynload',
'/app/.heroku/python/lib/python2.7/site-packages',
'/app/.heroku/python/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info']
我的设置是这样的:
PROJECT_DIR = os.path.dirname(__file__) #for heroku
TEMPLATE_DIRS = (
os.path.join(PROJECT_DIR, '/templates/'), # for heroku
'/Users/jacksongonzales/projects/QuoteBoard/templates/',
)
import os.path
也是最重要的。
TEMPLATE_DIRS 下的路径是我的模板的绝对路径。
我没有为 PROJECT_DIR 和 TEMPLATE_DIRS 变量添加正确的内容吗?
【问题讨论】:
【参考方案1】:我认为应该是
os.path.join(PROJECT_DIR, 'templates'), # for heroku
没有斜线。
os.path.join(PROJECT_DIR, '/templates/'), # for heroku
返回 /templates/
不是您期望的路径
来自docs:
如果任何组件是绝对路径,则所有先前的组件(在 Windows,包括以前的驱动器号,如果有的话)是 扔掉,继续加入。
【讨论】:
啊,我明白了。感谢您的提示和对文档的参考。之前没有完全理解这个功能。【参考方案2】:这是我为 Heroku 项目设置的。
# here() gives us file paths from the root of the system to the directory
# holding the current file.
here = lambda * x: os.path.join(os.path.abspath(os.path.dirname(__file__)), *x)
PROJECT_ROOT = here("..")
# root() gives us file paths from the root of the system to whatever
# folder(s) we pass it starting at the parent directory of the current file.
root = lambda * x: os.path.join(os.path.abspath(PROJECT_ROOT), *x)
....
TEMPLATE_DIRS = (
root('templates'),
)
更新: 我的项目与部署的项目具有相同的本地模板结构,因此我不需要在模板目录中添加直接路径。你有一个:
'/Users/jacksongonzales/projects/QuoteBoard/templates/',
如果您在TEMPLATE_DIRS
中的第一个条目是正确的,您需要第二个吗?
【讨论】:
非常感谢!成功!我的部分错误可能是没有将 PROJECT_ROOT 放在我的设置文件的顶部。编辑:另外,我不需要 TEMPLATE_DIRS 中的第二个文件路径。它只是作为本地使用的假人。以上是关于Django,TemplateDoesNotExist 错误:Heroku 找不到模板目录。如何显示它在哪里看?的主要内容,如果未能解决你的问题,请参考以下文章