Loading django/template/base.py +4 −1 Original line number Diff line number Diff line Loading @@ -773,7 +773,10 @@ class Variable(object): if isinstance(current, BaseContext) and getattr(type(current), bit): raise AttributeError current = getattr(current, bit) except (TypeError, AttributeError): 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): raise try: # list-index lookup current = current[int(bit)] except (IndexError, # list index out of range Loading tests/template_tests/tests.py +9 −2 Original line number Diff line number Diff line Loading @@ -110,13 +110,17 @@ class SomeClass: raise SomeOtherException raise KeyError @property def silent_fail_attribute(self): raise SomeException silent_fail_attribute = property(silent_fail_attribute) @property def noisy_fail_attribute(self): raise SomeOtherException noisy_fail_attribute = property(noisy_fail_attribute) @property def attribute_error_attribute(self): raise AttributeError class OtherClass: Loading Loading @@ -820,6 +824,9 @@ class TemplateTests(TestCase): 'filter-syntax23': (r'1{{ var.noisy_fail_key }}2', {"var": SomeClass()}, (SomeOtherException, SomeOtherException)), 'filter-syntax24': (r'1{{ var.noisy_fail_attribute }}2', {"var": SomeClass()}, (SomeOtherException, SomeOtherException)), # #16383 - A @property that raises AttributeError should not fail loudly. 'filter-syntax25': ('{{ var.attribute_error_attribute }}', {"var": SomeClass()}, (AttributeError)), ### COMMENT SYNTAX ######################################################## 'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"), 'comment-syntax02': ("{# this is hidden #}hello{# foo #}", {}, "hello"), Loading Loading
django/template/base.py +4 −1 Original line number Diff line number Diff line Loading @@ -773,7 +773,10 @@ class Variable(object): if isinstance(current, BaseContext) and getattr(type(current), bit): raise AttributeError current = getattr(current, bit) except (TypeError, AttributeError): 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): raise try: # list-index lookup current = current[int(bit)] except (IndexError, # list index out of range Loading
tests/template_tests/tests.py +9 −2 Original line number Diff line number Diff line Loading @@ -110,13 +110,17 @@ class SomeClass: raise SomeOtherException raise KeyError @property def silent_fail_attribute(self): raise SomeException silent_fail_attribute = property(silent_fail_attribute) @property def noisy_fail_attribute(self): raise SomeOtherException noisy_fail_attribute = property(noisy_fail_attribute) @property def attribute_error_attribute(self): raise AttributeError class OtherClass: Loading Loading @@ -820,6 +824,9 @@ class TemplateTests(TestCase): 'filter-syntax23': (r'1{{ var.noisy_fail_key }}2', {"var": SomeClass()}, (SomeOtherException, SomeOtherException)), 'filter-syntax24': (r'1{{ var.noisy_fail_attribute }}2', {"var": SomeClass()}, (SomeOtherException, SomeOtherException)), # #16383 - A @property that raises AttributeError should not fail loudly. 'filter-syntax25': ('{{ var.attribute_error_attribute }}', {"var": SomeClass()}, (AttributeError)), ### COMMENT SYNTAX ######################################################## 'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"), 'comment-syntax02': ("{# this is hidden #}hello{# foo #}", {}, "hello"), Loading