1
0
mirror of https://github.com/django/django.git synced 2025-10-24 22:26:08 +00:00

WIP: Refs #35281 -- Unified and generalized request error handling.

This commit is contained in:
Claude Paroz
2024-10-26 19:06:15 +02:00
parent 2debd018db
commit 73b904c5e0
16 changed files with 285 additions and 66 deletions

View File

@@ -342,25 +342,28 @@ Error handling
When Django can't find a match for the requested URL, or when an exception is
raised, Django invokes an error-handling view.
The views to use for these cases are specified by four variables. Their
default values should suffice for most projects, but further customization is
possible by overriding their default values.
The default view Django uses for these cases is
:class:`django.views.defaults.DefaultErrorView`. This view should suffice for
most projects but further customization is possible by defining a custom view
to handle errors, either by subclassing this view or by creating your own.
See the documentation on :ref:`customizing error views
See the documentation on :ref:`customizing error view
<customizing-error-views>` for the full details.
Such values can be set in your root URLconf. Setting these variables in any
other URLconf will have no effect.
.. versionchanged:: 5.2
Values must be callables, or strings representing the full Python import path
to the view that should be called to handle the error condition at hand.
In previous versions, the views to use for these cases are specified by four
variables.
The variables are:
Values must be callables, or strings representing the full Python import path
to the view that should be called to handle the error condition at hand.
* ``handler400`` -- See :data:`django.conf.urls.handler400`.
* ``handler403`` -- See :data:`django.conf.urls.handler403`.
* ``handler404`` -- See :data:`django.conf.urls.handler404`.
* ``handler500`` -- See :data:`django.conf.urls.handler500`.
The variables are:
* ``handler400``
* ``handler403``
* ``handler404``
* ``handler500``
.. _including-other-urlconfs:

View File

@@ -138,33 +138,46 @@ template.
.. _customizing-error-views:
Customizing error views
=======================
Customizing error view
======================
The default error views in Django should suffice for most web applications,
but can easily be overridden if you need any custom behavior. Specify the
handlers as seen below in your URLconf (setting them anywhere else will have no
effect).
The default error view in Django should suffice for most web applications, but
but can easily be overridden if you need any custom behavior.
The :func:`~django.views.defaults.page_not_found` view is overridden by
:data:`~django.conf.urls.handler404`::
The default error view can be overridden by setting a view in the
``error_handler`` variable in your URLconf (setting it anywhere else will have
no effect)::
handler404 = "mysite.views.my_custom_page_not_found_view"
error_handler = views.my_custom_error_view
The :func:`~django.views.defaults.server_error` view is overridden by
:data:`~django.conf.urls.handler500`::
or if you have a class-based-view::
handler500 = "mysite.views.my_custom_error_view"
error_handler = views.MyCustomErrorView.as_view()
The :func:`~django.views.defaults.permission_denied` view is overridden by
:data:`~django.conf.urls.handler403`::
.. versionchanged:: 5.2
handler403 = "mysite.views.my_custom_permission_denied_view"
On previous versions, there are multiple variables to define to override
particular views.
The :func:`~django.views.defaults.bad_request` view is overridden by
:data:`~django.conf.urls.handler400`::
The :func:`~django.views.defaults.page_not_found` view is overridden by
:data:`~django.conf.urls.handler404`::
handler400 = "mysite.views.my_custom_bad_request_view"
handler404 = "mysite.views.my_custom_page_not_found_view"
The :func:`~django.views.defaults.server_error` view is overridden by
:data:`~django.conf.urls.handler500`::
handler500 = "mysite.views.my_custom_error_view"
The :func:`~django.views.defaults.permission_denied` view is overridden by
:data:`~django.conf.urls.handler403`::
handler403 = "mysite.views.my_custom_permission_denied_view"
The :func:`~django.views.defaults.bad_request` view is overridden by
:data:`~django.conf.urls.handler400`::
handler400 = "mysite.views.my_custom_bad_request_view"
.. seealso::