Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django heroku找不到模板_Django_Heroku - Fatal编程技术网

Django heroku找不到模板

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-

我刚刚在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-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。不知道你的第二个问题是什么意思,伙计。在django
settings.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")],
        ...
    }
]