Django 500错误,因为Debug = False中不存在URL

时间:2019-01-06 13:57:06

标签: django django-urls django-errors

我在python 3.6.7中使用Django 2.1.3。 假设我有以下网址路径:

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

如果在/ad期间导航到DEBUG = True,则会看到正常的Django 404错误页面:

enter image description here

但是,如果我输入DEBUG = False,则服务器会向我显示 500.htm 而不是 404.html 来显示无效的URL /ad (与所有网址格式都不匹配)。

404.html 正在显示一个有效的URL,引发404错误。 (例如,使用get_object_or_404函数进行不存在的对象查询时)

这是我的/templates目录结构:

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

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

注意:

  • 根据docs,如果我在根模板目录中有一个404.html,则此404.html将与默认错误处理程序一起使用。

更新:

我发现它被遮挡是因为defaults.page_not_found引起了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)

2 个答案:

答案 0 :(得分:0)

您需要制作一个404视图,该视图将在没有URL匹配时呈现。然后您需要在hander404

中将其设置为urls.py
handler404 = 'mysite.views.my_custom_page_not_found_view'

有关更多信息:https://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views

答案 1 :(得分:0)

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

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