Fixed #16935 - misleading message if AttributeError escapes during SimpleTemplateResponse.render

Thanks to isagalaev for the report.

As discussed on django-devs, this reverts some of the changes in [16568]
i.e.  the addition of `SimpleTemplateResponse.__getattr__`, because this
makes it much harder to debug the common case of an AttributeError somewhere
during the rendering of a SimpleTemplateResponse.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16917 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Luke Plant 2011-09-30 11:46:23 +00:00
parent 5009e45dfe
commit 10d90cba83
2 changed files with 3 additions and 16 deletions

View File

@ -6,10 +6,6 @@ class ContentNotRenderedError(Exception):
pass pass
class DiscardedAttributeError(AttributeError):
pass
class SimpleTemplateResponse(HttpResponse): class SimpleTemplateResponse(HttpResponse):
rendering_attrs = ['template_name', 'context_data', '_post_render_callbacks'] rendering_attrs = ['template_name', 'context_data', '_post_render_callbacks']
@ -36,7 +32,6 @@ class SimpleTemplateResponse(HttpResponse):
# True, so we initialize it to False after the call to super __init__. # True, so we initialize it to False after the call to super __init__.
self._is_rendered = False self._is_rendered = False
def __getstate__(self): def __getstate__(self):
"""Pickling support function. """Pickling support function.
@ -54,13 +49,6 @@ class SimpleTemplateResponse(HttpResponse):
return obj_dict return obj_dict
def __getattr__(self, name):
if name in self.rendering_attrs:
raise DiscardedAttributeError('The %s attribute was discarded '
'when this %s class was pickled.' %
(name, self.__class__.__name__))
return super(SimpleTemplateResponse, self).__getattr__(name)
def resolve_template(self, template): def resolve_template(self, template):
"Accepts a template object, path-to-template or list of paths" "Accepts a template object, path-to-template or list of paths"
if isinstance(template, (list, tuple)): if isinstance(template, (list, tuple)):

View File

@ -9,8 +9,7 @@ from django.conf import settings
import django.template.context import django.template.context
from django.template import Template, Context from django.template import Template, Context
from django.template.response import (TemplateResponse, SimpleTemplateResponse, from django.template.response import (TemplateResponse, SimpleTemplateResponse,
ContentNotRenderedError, ContentNotRenderedError)
DiscardedAttributeError)
def test_processor(request): def test_processor(request):
return {'processors': 'yes'} return {'processors': 'yes'}
@ -198,7 +197,7 @@ class SimpleTemplateResponseTest(BaseTemplateResponseTest):
# ...and requesting any of those attributes raises an exception # ...and requesting any of those attributes raises an exception
for attr in template_attrs: for attr in template_attrs:
with self.assertRaises(DiscardedAttributeError) as cm: with self.assertRaises(AttributeError):
getattr(unpickled_response, attr) getattr(unpickled_response, attr)
def test_repickling(self): def test_repickling(self):
@ -282,7 +281,7 @@ class TemplateResponseTest(BaseTemplateResponseTest):
# ...and requesting any of those attributes raises an exception # ...and requesting any of those attributes raises an exception
for attr in template_attrs: for attr in template_attrs:
with self.assertRaises(DiscardedAttributeError) as cm: with self.assertRaises(AttributeError):
getattr(unpickled_response, attr) getattr(unpickled_response, attr)
def test_repickling(self): def test_repickling(self):