From 795b6a12714d8e2ce43c9316dd9d1af8223bf659 Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Sat, 19 Jul 2008 18:49:49 +0000 Subject: [PATCH] Fixed #7471 -- If the 400 response handler raises an exception, pass control to the 500 handler (if that then raises an exception, it's just not your day). Patch from Leah Culver. git-svn-id: http://code.djangoproject.com/svn/django/trunk@7988 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/core/handlers/base.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py index 29835d7ce5..f63b28dc66 100644 --- a/django/core/handlers/base.py +++ b/django/core/handlers/base.py @@ -107,8 +107,11 @@ class BaseHandler(object): from django.views import debug return debug.technical_404_response(request, e) else: - callback, param_dict = resolver.resolve404() - return callback(request, **param_dict) + try: + callback, param_dict = resolver.resolve404() + return callback(request, **param_dict) + except: + return self.handle_uncaught_exception(request, resolver, sys.exc_info()) except exceptions.PermissionDenied: return http.HttpResponseForbidden('

Permission denied

') except SystemExit: @@ -118,9 +121,6 @@ class BaseHandler(object): # Get the exception info now, in case another exception is thrown later. exc_info = sys.exc_info() receivers = dispatcher.send(signal=signals.got_request_exception, request=request) - - if settings.DEBUG_PROPAGATE_EXCEPTIONS: - raise return self.handle_uncaught_exception(request, resolver, exc_info) def handle_uncaught_exception(self, request, resolver, exc_info): @@ -136,6 +136,9 @@ class BaseHandler(object): from django.conf import settings from django.core.mail import mail_admins + if settings.DEBUG_PROPAGATE_EXCEPTIONS: + raise + if settings.DEBUG: from django.views import debug return debug.technical_500_response(request, *exc_info)