Debug=False 中不存在 url 的 Django 500 错误
Django 500 error for not-existing url in Debug=False
我在 python 3.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 模式的 none)。
404.html 显示有效 URL,引发 404 错误。 (比如当 不存在的对象 查询发生在 get_object_or_404
函数时)
这是我的 /templates
目录结构:
/templates
400.html
403.html
404.html
500.html
index.html
...
那么,如果请求 URL 匹配 URL 模式的 none,我应该如何告诉 Django 在生产(除了开发)中显示 404 错误?
注:
- 根据 docs,如果我在根模板目录中有一个
404.html
,这个 404.html 将与默认错误处理程序一起使用。
更新:
我发现它很高兴,因为 defaults.page_not_found
引发了 Resolver404
,这是由 :
引起的
the path passed to resolve() doesn’t map to a view
这正是发生的事情,(/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)
您需要制作一个 404 视图,当没有 URL 匹配项时将呈现该视图。然后需要在urls.py
中设置hander404
handler404 = 'mysite.views.my_custom_page_not_found_view'
更多信息:https://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views
我发现我的自定义模板上下文处理器之一使用了 django.urls.resolve
,并且由于路径不匹配任何视图,resolve
引发了 Resolver404.
所以我修复了那个上下文处理器,问题就解决了!
我在 python 3.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 模式的 none)。
404.html 显示有效 URL,引发 404 错误。 (比如当 不存在的对象 查询发生在 get_object_or_404
函数时)
这是我的 /templates
目录结构:
/templates
400.html
403.html
404.html
500.html
index.html
...
那么,如果请求 URL 匹配 URL 模式的 none,我应该如何告诉 Django 在生产(除了开发)中显示 404 错误?
注:
- 根据 docs,如果我在根模板目录中有一个
404.html
,这个 404.html 将与默认错误处理程序一起使用。
更新:
我发现它很高兴,因为 defaults.page_not_found
引发了 Resolver404
,这是由 :
the path passed to resolve() doesn’t map to a view
这正是发生的事情,(/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)
您需要制作一个 404 视图,当没有 URL 匹配项时将呈现该视图。然后需要在urls.py
hander404
handler404 = 'mysite.views.my_custom_page_not_found_view'
更多信息:https://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views
我发现我的自定义模板上下文处理器之一使用了 django.urls.resolve
,并且由于路径不匹配任何视图,resolve
引发了 Resolver404.
所以我修复了那个上下文处理器,问题就解决了!