diff options
Diffstat (limited to 'django/urls/resolvers.py')
| -rw-r--r-- | django/urls/resolvers.py | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/django/urls/resolvers.py b/django/urls/resolvers.py index 8f59313c93..9d3379a821 100644 --- a/django/urls/resolvers.py +++ b/django/urls/resolvers.py @@ -15,7 +15,7 @@ from urllib.parse import quote from django.conf import settings from django.core.checks import Error, Warning from django.core.checks.urls import check_resolver -from django.core.exceptions import ImproperlyConfigured +from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist from django.utils.datastructures import MultiValueDict from django.utils.functional import cached_property from django.utils.http import RFC3986_SUBDELIMS, escape_leading_slashes @@ -405,7 +405,15 @@ class URLResolver: # All handlers take (request, exception) arguments except handler500 # which takes (request). for status_code, num_parameters in [(400, 2), (403, 2), (404, 2), (500, 1)]: - handler, param_dict = self.resolve_error_handler(status_code) + try: + handler, param_dict = self.resolve_error_handler(status_code) + except (ImportError, ViewDoesNotExist) as e: + path = getattr(self.urlconf_module, 'handler%s' % status_code) + msg = ( + "The custom handler{status_code} view '{path}' could not be imported." + ).format(status_code=status_code, path=path) + messages.append(Error(msg, hint=str(e), id='urls.E008')) + continue signature = inspect.signature(handler) args = [None] * num_parameters try: |
