我在python 3.6.7中使用Django 2.1.3。 假设我有以下网址路径:
path('admin/', admin.site.urls)
如果在/ad
期间导航到DEBUG = True
,则会看到正常的Django 404错误页面:
但是,如果我输入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错误?
注意:
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)
答案 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 。
所以我修复了上下文处理器,问题就解决了!