首页 > 解决方案 > Debug=False 中不存在的 url 的 Django 500 错误

问题描述

我在 python 3.6.7 中使用 Django 2.1.3。假设我有这个 URL 路径:

path('admin/', admin.site.urls)

如果我导航到/adwhile DEBUG = True,我会看到正常的 Django 404 错误页面:

在此处输入图像描述

但是,如果我这样做DEBUG = False了,那么服务器会向我显示500.htm而不是404.html用于无效 URL /ad(不匹配任何 URL 模式)。

404.html显示为引发 404 错误的有效 URL 。(例如当函数发生不存在的对象查询时get_object_or_404

这是我的/templates目录结构:

/templates
    400.html
    403.html
    404.html
    500.html
    index.html
    ...

那么,如果请求 URL 与任何 URL 模式都不匹配,我应该如何告诉 Django 在生产中(除了开发)显示 404 错误?

笔记:

更新:

我发现它已经发生了,因为defaults.page_not_found引发了 a Resolver404,这是由以下原因引起的:

传递给 resolve() 的路径没有映射到视图

这正是发生的事情,(/ad不匹配任何观点)

这是我的 urls.py:

from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path

urlpatterns = [
              path('admin/', admin.site.urls),
              ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

标签: djangodjango-urlsdjango-errors

解决方案


我发现我的一个自定义模板上下文处理器使用django.urls.resolve,并且由于路径与任何视图都不匹配,因此resolve引发了Resolver404

所以我修复了那个上下文处理器,问题就解决了!


推荐阅读