Django在Debug=False模式下,对于不存在的URL返回500错误。

7
我正在使用Python 3.6.7中的Django 2.1.3。 假设我有这个URL路径:
path('admin/', admin.site.urls)

如果我在 DEBUG = True 的情况下导航到 /ad ,我会看到正常的Django 404错误页面:

enter image description here

但是如果我把DEBUG = False,那么当访问无效的URL /ad(不匹配任何URL模式)时,服务器会显示500.htm而不是404.html
对于引发404错误的有效URL(例如使用get_object_or_404函数进行不存在对象查询时),将显示404.html
这是我的/templates目录结构:
/templates
    400.html
    403.html
    404.html
    500.html
    index.html
    ...

那么,我该如何告诉Django在生产环境下显示404错误(除了开发环境),如果请求的URL与所有URL模式均不匹配?
注意:
根据 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个回答

4

我发现我的一个自定义模板上下文处理器使用了django.urls.resolve,但是该路径没有匹配任何视图,所以resolve会引发Resolver404错误。

我修复了这个上下文处理器并解决了问题!


-1

我只需要更改错误页面模板,但我这样做后得到了相同的结果。如果URL与任何URL模式都不匹配,则会显示500错误页面! - M.A. Heshmat Khah
请添加您的urls.py文件。 - shafik
你需要在urls.py中添加handler404。 - shafik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接