调试中不存在url的Django 500错误=False

调试中不存在url的Django 500错误=False,django,django-urls,django-errors,Django,Django Urls,Django Errors,我正在使用Python3.6.7中的Django 2.1.3。 假设我有以下URL路径: path('admin/', admin.site.urls) 如果在DEBUG=True时导航到/ad,我会看到正常的Django 404错误页面: 但是如果我设置DEBUG=False,那么服务器会向我显示500.htm,而不是404.html,用于无效的URL/ad(不匹配任何URL模式) 404.html显示的是引发404错误的有效URL。(如使用get\u object\u或_404函数进行不

我正在使用Python3.6.7中的Django 2.1.3。 假设我有以下URL路径:

path('admin/', admin.site.urls)
如果在
DEBUG=True
时导航到
/ad
,我会看到正常的Django 404错误页面:

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

404.html显示的是引发404错误的有效URL。(如使用
get\u object\u或_404
函数进行不存在对象的查询时)

这是我的
/templates
目录结构:

/templates
    400.html
    403.html
    404.html
    500.html
    index.html
    ...
那么,如果请求URL与任何URL模式都不匹配,我应该如何告诉Django在生产中显示404错误(除了开发之外)

注:

  • 根据,如果我在根模板目录中有一个
    404.html
    ,那么这个404.html将与默认的错误处理程序一起使用
更新:

我发现这是因为
默认值。未找到的页面
引发了
解析404
,这是由以下原因造成的:

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

这正是发生的情况,(该
/ad
与任何视图都不匹配)

这是我的URL.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)

您需要创建一个404视图,该视图将在没有URL匹配时呈现。然后您需要在
url.py中设置它
hander404

handler404 = 'mysite.views.my_custom_page_not_found_view'

有关详细信息:

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


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

我只需要更改错误页面模板,但是我这样做了,并且得到了相同的结果,如果URL与任何URL模式都不匹配,则会显示500错误页面!添加URL.py您需要在URL.py中添加handler404