Fixed #27140 -- Prevented template rendering from hiding a property's TypeError.

This commit is contained in:
Tim Graham 2016-08-31 13:44:38 -04:00 committed by GitHub
parent 65ec8fa8ca
commit 59afe61a97
3 changed files with 11 additions and 3 deletions

View File

@ -892,9 +892,8 @@ class Variable(object):
raise AttributeError
current = getattr(current, bit)
except (TypeError, AttributeError) as e:
# Reraise an AttributeError raised by a @property
if (isinstance(e, AttributeError) and
not isinstance(current, BaseContext) and bit in dir(current)):
# Reraise if the exception was raised by a @property
if not isinstance(current, BaseContext) and bit in dir(current):
raise
try: # list-index lookup
current = current[int(bit)]

View File

@ -237,3 +237,8 @@ class FilterSyntaxTests(SimpleTestCase):
"""
with self.assertRaises(AttributeError):
self.engine.render_to_string('filter-syntax25', {'var': SomeClass()})
@setup({'template': '{{ var.type_error_attribute }}'})
def test_type_error_attribute(self):
with self.assertRaises(TypeError):
self.engine.render_to_string('template', {'var': SomeClass()})

View File

@ -137,6 +137,10 @@ class SomeClass:
def attribute_error_attribute(self):
raise AttributeError
@property
def type_error_attribute(self):
raise TypeError
class OtherClass:
def method(self):