Commit 10d90cba authored by Luke Plant's avatar Luke Plant
Browse files

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
parent 5009e45d
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -6,10 +6,6 @@ class ContentNotRenderedError(Exception):
    pass


class DiscardedAttributeError(AttributeError):
    pass


class SimpleTemplateResponse(HttpResponse):
    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__.
        self._is_rendered = False


    def __getstate__(self):
        """Pickling support function.

@@ -54,13 +49,6 @@ class SimpleTemplateResponse(HttpResponse):

        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):
        "Accepts a template object, path-to-template or list of paths"
        if isinstance(template, (list, tuple)):
+3 −4
Original line number Diff line number Diff line
@@ -9,8 +9,7 @@ from django.conf import settings
import django.template.context
from django.template import Template, Context
from django.template.response import (TemplateResponse, SimpleTemplateResponse,
                                      ContentNotRenderedError,
                                      DiscardedAttributeError)
                                      ContentNotRenderedError)

def test_processor(request):
    return {'processors': 'yes'}
@@ -198,7 +197,7 @@ class SimpleTemplateResponseTest(BaseTemplateResponseTest):

        # ...and requesting any of those attributes raises an exception
        for attr in template_attrs:
            with self.assertRaises(DiscardedAttributeError) as cm:
            with self.assertRaises(AttributeError):
                getattr(unpickled_response, attr)

    def test_repickling(self):
@@ -282,7 +281,7 @@ class TemplateResponseTest(BaseTemplateResponseTest):

        # ...and requesting any of those attributes raises an exception
        for attr in template_attrs:
            with self.assertRaises(DiscardedAttributeError) as cm:
            with self.assertRaises(AttributeError):
                getattr(unpickled_response, attr)

    def test_repickling(self):