1
0
mirror of https://github.com/django/django.git synced 2025-03-09 17:02:43 +00:00

Fixed #4457 -- Corrected the handling of exceptions in the test client when the 500.html template is not available. Thanks to Chris Wager <cw264701@ohiou.edu> for his help in tracking down this problem.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@6023 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2007-08-28 13:03:22 +00:00
parent 44e620972d
commit 258af283fc

View File

@ -11,6 +11,7 @@ from django.core.handlers.wsgi import WSGIRequest
from django.core.signals import got_request_exception from django.core.signals import got_request_exception
from django.dispatch import dispatcher from django.dispatch import dispatcher
from django.http import SimpleCookie, HttpRequest from django.http import SimpleCookie, HttpRequest
from django.template import TemplateDoesNotExist
from django.test import signals from django.test import signals
from django.utils.functional import curry from django.utils.functional import curry
from django.utils.encoding import smart_str from django.utils.encoding import smart_str
@ -165,7 +166,21 @@ class Client:
# Capture exceptions created by the handler # Capture exceptions created by the handler
dispatcher.connect(self.store_exc_info, signal=got_request_exception) dispatcher.connect(self.store_exc_info, signal=got_request_exception)
try:
response = self.handler(environ) response = self.handler(environ)
except TemplateDoesNotExist, e:
# If the view raises an exception, Django will attempt to show
# the 500.html template. If that template is not available,
# we should ignore the error in favor of re-raising the
# underlying exception that caused the 500 error. Any other
# template found to be missing during view error handling
# should be reported as-is.
if e.args != ('500.html',):
raise
# Look for a signalled exception and reraise it
if self.exc_info:
raise self.exc_info[1], None, self.exc_info[2]
# Add any rendered template detail to the response # Add any rendered template detail to the response
# If there was only one template rendered (the most likely case), # If there was only one template rendered (the most likely case),
@ -179,10 +194,6 @@ class Client:
else: else:
setattr(response, detail, None) setattr(response, detail, None)
# Look for a signalled exception and reraise it
if self.exc_info:
raise self.exc_info[1], None, self.exc_info[2]
# Update persistent cookie data # Update persistent cookie data
if response.cookies: if response.cookies:
self.cookies.update(response.cookies) self.cookies.update(response.cookies)