Django heroku找不到模板
我刚刚在Heroku上部署了Django站点,但是我得到了Django heroku找不到模板,django,heroku,Django,Heroku,我刚刚在Heroku上部署了Django站点,但是我得到了TemplateNotFoundError: Traceback (most recent call last): 2018-01-17T16:17:41.010548+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner 2018-01-
TemplateNotFoundError
:
Traceback (most recent call last):
2018-01-17T16:17:41.010548+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
2018-01-17T16:17:41.010548+00:00 app[web.1]: response = get_response(request)
2018-01-17T16:17:41.010549+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
2018-01-17T16:17:41.010550+00:00 app[web.1]: response = self.process_exception_by_middleware(e, request)
2018-01-17T16:17:41.010551+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
2018-01-17T16:17:41.010551+00:00 app[web.1]: response = wrapped_callback(request, *callback_args, **callback_kwargs)
2018-01-17T16:17:41.010552+00:00 app[web.1]: File "/app/workoutcal/views.py", line 51, in redirect_to_calendar
2018-01-17T16:17:41.010553+00:00 app[web.1]: return calendar(request, year = today.year, month = today.month)
2018-01-17T16:17:41.010554+00:00 app[web.1]: File "/app/workoutcal/views.py", line 56, in calendar
2018-01-17T16:17:41.010554+00:00 app[web.1]: return prompt_login(request)
2018-01-17T16:17:41.010555+00:00 app[web.1]: File "/app/workoutcal/views.py", line 286, in prompt_login
2018-01-17T16:17:41.010556+00:00 app[web.1]: return render(request, 'workoutcal/prompt_login.html')
2018-01-17T16:17:41.010556+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/shortcuts.py", line 36, in render
2018-01-17T16:17:41.010557+00:00 app[web.1]: content = loader.render_to_string(template_name, context, request, using=using)
2018-01-17T16:17:41.010558+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/template/loader.py", line 62, in render_to_string
2018-01-17T16:17:41.010559+00:00 app[web.1]: return template.render(context, request)
2018-01-17T16:17:41.010559+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/template/backends/django.py", line 63, in render
2018-01-17T16:17:41.010560+00:00 app[web.1]: reraise(exc, self.backend)
2018-01-17T16:17:41.010561+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/template/backends/django.py", line 84, in reraise
2018-01-17T16:17:41.010561+00:00 app[web.1]: raise new from exc
2018-01-17T16:17:41.010565+00:00 app[web.1]: django.template.exceptions.TemplateDoesNotExist: workout/base.html
我已经做了回答中建议的事情:
但这没用
这里有什么问题
附言:在我的本地机器上一切正常。(更新:这不是真的,因为我正在本地使用另一个设置文件。我的不好。)
更新:
改为:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],
}
]
同样的问题依然存在
更新2:
我把它放在设置中:
path = os.path.join(BASE_DIR, "templates")
print("\n\n\n\n\n\nHERE'S THE PATH: "+str(path))
它产生了:
HERE'S THE PATH: /app/workout/templates
我不知道这是否是Heroku中的模板文件所在的位置。我怎么查
下面是base.html在我的项目中的位置:
因此,这将是
workout/templates/workout/base.html
(不包括根项目文件夹)。比较这两条路径,它们似乎指向的不是同一件事。实际检查的第一个步骤缺少另一个与base.html
位于同一文件夹中的步骤workout
。这就是问题所在吗?如何修复它?您链接到的问题已过期多年。由于Django 1.8,您应该使用模板
,而不是模板*
设置
将templates
目录添加到DIRS
选项中
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],
...
}
]
这假设您的模板
目录位于项目目录(包含manage的目录)中。您的模板目录似乎位于内部训练
目录(包含设置的目录)中。因此,您需要在DIRS
中使用os.path.join(基本目录,“训练”、“模板”)
如果您希望将模板保留在内部
训练
目录中,则另一个选项是将训练
添加到您的已安装的应用程序
。然后应用程序目录加载器将找到您的训练模板,您不需要在DIRS
中输入。即使您这样做,使用DIRS
方法让模板
工作也是很有用的。例如,如果您的BASE\u DIR
错误,则可能会在其他地方给您带来问题。有此问题,并发现在我的本地mac上,模板的文件名区分大小写,而在Heroku上则区分大小写
所以它在我的机器上工作,但在Heroku上抛出TemplateNotFound
components/react/ReactDOM.jsx
与Mac版的jinja中的components/react/ReactDOM.jsx相同,但与linux版的jinja(Heroku)不同django版本是什么?您是否可以确保右侧视图中的template\u name
指向templates
目录中的现有模板?2.0。不知道你的第二个问题是什么意思,伙计。在djangosettings.py
中,TEMPLATES[x]['DIRS']
是django应该在其中查找模板的目录列表。它正在寻找的确切模板在视图中由template\u name
命名(对于CBV)。因此,如果您的结构相似:templates/sth/my\u template.html
意味着,您应该这样配置视图:template\u name=sth/my\u template.html
。您能确保它是正确的吗?请注意,回溯提到了提示\u登录
-您可能会发现,如果您在本地计算机上注销,则会出现类似错误。由于您的设置是目录而不是文件,因此您可能必须添加另一个os.path.dirname()
当设置BASE\u DIR
时,它被设置为项目目录。我按照你说的做了,但它没有改变任何东西。我把我所做的更改放在问题的更新中。然后你需要做更多的调试。workout/base.html
模板在哪里?os.path.join(BASE\u DIR,“templates”)
的计算结果是什么?他们匹配吗。也许这是一个锻炼/锻炼的命名问题,就像你的许多问题一样。我做了一些调试,并在更新中发布了结果。os.path.join(BASE_DIR,“templates”)
假设模板目录在项目目录中。看起来好像你的模板放在了内部目录中。你需要调整DIRS
设置(可能还有我在前面的评论中提到的BASE\u DIR
,以便它与模板目录/path/to/workout/templates/
(忽略最后的训练/base.html
,因为这是您在{%extends%}
标记中指定的。首先在您的本地环境中执行此操作会更容易,然后您将获得可比较的绝对路径,而不是/app/../
。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],
...
}
]