Django:Heroku 上的生产应用程序找不到带有“路径”urlpattern 的模板
Posted
技术标签:
【中文标题】Django:Heroku 上的生产应用程序找不到带有“路径”urlpattern 的模板【英文标题】:Django: production app on Heroku cant find templates with "path" urlpattern 【发布时间】:2019-08-24 04:32:09 【问题描述】:我在 Heroku 上拥有我的生产站点。
该应用可以在urls.py
文件的urlpatterns
中找到使用url
定义的模板。
点赞:url(r'^contactreport/$', views.ContactosView, name="contactos"),
但不是path
定义的那些。
点赞:path('inventario/', views.InventarioView, name="inventario"),
设置
这是我在settings.py
中的静态文件夹配置
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
这是我的中间件(但我认为这不是问题)。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
我得到的错误
当我尝试链接到我得到的那些页面时:
模板不存在
django.template.loaders.filesystem.Loader: /app/templates/catalog/tareas.html(来源不存在)
html模板存在。
完整的追溯
环境:
请求方法:GET 请求 URL: https://afternoon-wildwood-39943.herokuapp.com/catalog/tareas/
Django 版本:2.1.3 Python 版本:3.7.0 已安装的应用程序: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'catalog.apps.CatalogConfig'、'rest_framework'、'django.urls'、 'django.contrib.humanize', 'catalog.templatetags'] 已安装 中间件:['django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']
模板加载器事后 Django 尝试加载这些模板,在 这个顺序:
使用引擎 django: * django.template.loaders.filesystem.Loader: /app/templates/catalog/tareas.html (来源不存在) * django.template.loaders.app_directories.Loader:/app/.heroku/python/lib/python3.7/site-packages/django/contrib/admin/templates/catalog/tareas.html (来源不存在) * django.template.loaders.app_directories.Loader:/app/.heroku/python/lib/python3.7/site-packages/django/contrib/auth/templates/catalog/tareas.html (来源不存在) * django.template.loaders.app_directories.Loader: /app/catalog/templates/catalog/tareas.html (来源不存在) * django.template.loaders.app_directories.Loader:/app/.heroku/python/lib/python3.7/site-packages/rest_framework/templates/catalog/tareas.html (来源不存在)
追溯:
文件 “/app/.heroku/python/lib/python3.7/site-packages/django/core/handlers/exception.py” 在内部 34. response = get_response(request)
文件 “/app/.heroku/python/lib/python3.7/site-packages/django/core/handlers/base.py” 在 _get_response 126. response = self.process_exception_by_middleware(e, request)
文件 “/app/.heroku/python/lib/python3.7/site-packages/django/core/handlers/base.py” 在 _get_response 124. response = Wrapped_callback(request, *callback_args, **callback_kwargs)
文件 “/app/.heroku/python/lib/python3.7/site-packages/django/contrib/auth/decorators.py” 在 _wrapped_view 21. return view_func(request, *args, **kwargs)
TareasView 中的文件“/app/catalog/views.py” 630.'mis_tareas_atrasadas':mis_tareas_atrasadas,
文件 “/app/.heroku/python/lib/python3.7/site-packages/django/shortcuts.py” 在渲染中 36. content = loader.render_to_string(template_name, context, request, using=using)
文件 “/app/.heroku/python/lib/python3.7/site-packages/django/template/loader.py” 在 render_to_string 61. template = get_template(template_name, using=using)
文件 “/app/.heroku/python/lib/python3.7/site-packages/django/template/loader.py” 在 get_template 19. 提出 TemplateDoesNotExist(template_name, chain=chain)
异常类型:TemplateDoesNotExist at /catalog/tareas/ 异常 值:目录/tareas.html
导致问题的观点之一
@login_required
def TareasView(request):
tareas_filter_form = TareasFilterForm(request.POST)
tareas_form = FormularioTareas(request.POST)
tareas = Tareas.objects.all()
tareas = tareas.order_by("-fecha_creacion")
mis_tareas_por_hacer = tareas.filter(resuelto=False).count()
desde = date.today() - timedelta(days=365)
hasta = date.today() - timedelta(days=1)
mis_tareas_atrasadas = tareas.filter(fecha_limite__range=[desde, hasta]).count()
if request.method == "POST" and 'filtrar_tareas' in request.POST:
tareas_filter_form = TareasFilterForm(request.POST)
if tareas_filter_form.is_valid():
estatus_resuelto = tareas_filter_form.cleaned_data["estatus_resuelto"]
destinatario = tareas_filter_form.cleaned_data["destinatario"]
busca_titulo = tareas_filter_form.cleaned_data["busca_titulo"]
if destinatario:
tareas = tareas.filter(destinatario=destinatario)
if estatus_resuelto != "Todas":
tareas = tareas.filter(resuelto=estatus_resuelto)
tareas = tareas.filter(titulo__icontains=busca_titulo)
return render(request, 'catalog/tareas.html',
'tareas_form': tareas_form,
'tareas_filter_form': tareas_filter_form,
'tareas': tareas,
'mis_tareas_por_hacer': mis_tareas_por_hacer,
'mis_tareas_atrasadas': mis_tareas_atrasadas,
)
欢迎提供任何线索。提前致谢!
【问题讨论】:
您是否在 urls.py 中输入了from django.urls import path
?
@Aurélien 是的,我做到了。
什么意思,找不到模板?模板与此有什么关系?当您访问该 URL 时,究竟会发生什么?
@DanielRoseman 刚刚更新了帖子
如果您收到TemplateDoesNotExist
,请显示失败的视图、完整的错误消息和项目布局。如果您使用path()
或url()
,则不会影响此错误。
【参考方案1】:
您的视图正在尝试渲染'catalog/tareas.html'
return render(request, 'catalog/tareas.html', ...)
但是你的模板名称是catalog/Tareas.html
。
如果您在不区分大小写的文件系统上进行开发,那么您将不会看到任何开发错误。
但是,在生产中,Heroku 运行在区分大小写的文件系统上,因此找不到模板。
【讨论】:
天啊!非常感谢。我快疯了。以上是关于Django:Heroku 上的生产应用程序找不到带有“路径”urlpattern 的模板的主要内容,如果未能解决你的问题,请参考以下文章
Django React -- Heroku 上的部署错误(找不到页面 404)