Loading django/template/base.py +8 −5 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ from __future__ import unicode_literals import re from functools import partial from importlib import import_module from inspect import getargspec from inspect import getargspec, getcallargs from django.conf import settings from django.template.context import (BaseContext, Context, RequestContext, Loading Loading @@ -788,10 +788,13 @@ class Variable(object): else: try: # method call (assuming no args required) current = current() except TypeError: try: getcallargs(current) except TypeError: # arguments *were* required # GOTCHA: This will also catch any TypeError # raised in the function itself. current = settings.TEMPLATE_STRING_IF_INVALID # invalid method call else: raise except Exception as e: if getattr(e, 'silent_variable_failure', False): current = settings.TEMPLATE_STRING_IF_INVALID Loading docs/releases/1.7.txt +3 −0 Original line number Diff line number Diff line Loading @@ -282,6 +282,9 @@ Templates :setting:`TEMPLATE_DEBUG` is ``True``. This allows template origins to be inspected and logged outside of the ``django.template`` infrastructure. * ``TypeError`` exceptions are not longer silenced when raised during the rendering of a template. Backwards incompatible changes in 1.7 ===================================== Loading tests/template_tests/tests.py +6 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,9 @@ class SomeClass: def method4(self): raise SomeOtherException def method5(self): raise TypeError def __getitem__(self, key): if key == 'silent_fail_key': raise SomeException Loading Loading @@ -680,6 +683,9 @@ class TemplateTests(TransRealMixin, TestCase): # Fail silently when accessing a non-simple method 'basic-syntax20': ("{{ var.method2 }}", {"var": SomeClass()}, ("","INVALID")), # Don't silence a TypeError if it was raised inside a callable 'basic-syntax20b': ("{{ var.method5 }}", {"var": SomeClass()}, TypeError), # Don't get confused when parsing something that is almost, but not # quite, a template tag. 'basic-syntax21': ("a {{ moo %} b", {}, "a {{ moo %} b"), Loading Loading
django/template/base.py +8 −5 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ from __future__ import unicode_literals import re from functools import partial from importlib import import_module from inspect import getargspec from inspect import getargspec, getcallargs from django.conf import settings from django.template.context import (BaseContext, Context, RequestContext, Loading Loading @@ -788,10 +788,13 @@ class Variable(object): else: try: # method call (assuming no args required) current = current() except TypeError: try: getcallargs(current) except TypeError: # arguments *were* required # GOTCHA: This will also catch any TypeError # raised in the function itself. current = settings.TEMPLATE_STRING_IF_INVALID # invalid method call else: raise except Exception as e: if getattr(e, 'silent_variable_failure', False): current = settings.TEMPLATE_STRING_IF_INVALID Loading
docs/releases/1.7.txt +3 −0 Original line number Diff line number Diff line Loading @@ -282,6 +282,9 @@ Templates :setting:`TEMPLATE_DEBUG` is ``True``. This allows template origins to be inspected and logged outside of the ``django.template`` infrastructure. * ``TypeError`` exceptions are not longer silenced when raised during the rendering of a template. Backwards incompatible changes in 1.7 ===================================== Loading
tests/template_tests/tests.py +6 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,9 @@ class SomeClass: def method4(self): raise SomeOtherException def method5(self): raise TypeError def __getitem__(self, key): if key == 'silent_fail_key': raise SomeException Loading Loading @@ -680,6 +683,9 @@ class TemplateTests(TransRealMixin, TestCase): # Fail silently when accessing a non-simple method 'basic-syntax20': ("{{ var.method2 }}", {"var": SomeClass()}, ("","INVALID")), # Don't silence a TypeError if it was raised inside a callable 'basic-syntax20b': ("{{ var.method5 }}", {"var": SomeClass()}, TypeError), # Don't get confused when parsing something that is almost, but not # quite, a template tag. 'basic-syntax21': ("a {{ moo %} b", {}, "a {{ moo %} b"), Loading