summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-07-19 18:49:49 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-07-19 18:49:49 +0000
commit795b6a12714d8e2ce43c9316dd9d1af8223bf659 (patch)
tree62ea873b5c15cb7bc79c6d5e846262009bb11eea
parent344383284cf1a51fa646bc8926014f78ba512a56 (diff)
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
-rw-r--r--django/core/handlers/base.py13
1 files 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('<h1>Permission denied</h1>')
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)