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:
parent
5009e45dfe
commit
10d90cba83
|
@ -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)):
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Reference in New Issue