diff --git a/django/template/base.py b/django/template/base.py index 6044226254..85bafdd3b4 100644 --- a/django/template/base.py +++ b/django/template/base.py @@ -71,10 +71,6 @@ libraries = {} # global list of libraries to load by default for a new parser builtins = [] -# True if TEMPLATE_STRING_IF_INVALID contains a format string (%s). None means -# uninitialized. -invalid_var_format_string = None - class TemplateSyntaxError(Exception): pass @@ -601,15 +597,14 @@ class FilterExpression(object): if ignore_failures: obj = None else: - if settings.TEMPLATE_STRING_IF_INVALID: - global invalid_var_format_string - if invalid_var_format_string is None: - invalid_var_format_string = '%s' in settings.TEMPLATE_STRING_IF_INVALID - if invalid_var_format_string: - return settings.TEMPLATE_STRING_IF_INVALID % self.var - return settings.TEMPLATE_STRING_IF_INVALID + string_if_invalid = context.engine.string_if_invalid + if string_if_invalid: + if '%s' in string_if_invalid: + return string_if_invalid % self.var + else: + return string_if_invalid else: - obj = settings.TEMPLATE_STRING_IF_INVALID + obj = string_if_invalid else: obj = self.var for func, args in self.filters: @@ -794,7 +789,7 @@ class Variable(object): if getattr(current, 'do_not_call_in_templates', False): pass elif getattr(current, 'alters_data', False): - current = settings.TEMPLATE_STRING_IF_INVALID + current = context.engine.string_if_invalid else: try: # method call (assuming no args required) current = current() @@ -802,12 +797,12 @@ class Variable(object): try: getcallargs(current) except TypeError: # arguments *were* required - current = settings.TEMPLATE_STRING_IF_INVALID # invalid method call + current = context.engine.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 + current = context.engine.string_if_invalid else: raise diff --git a/django/templatetags/i18n.py b/django/templatetags/i18n.py index 96560d8068..d9db91a413 100644 --- a/django/templatetags/i18n.py +++ b/django/templatetags/i18n.py @@ -149,7 +149,7 @@ class BlockTranslateNode(Node): result = translation.pgettext(message_context, singular) else: result = translation.ugettext(singular) - default_value = settings.TEMPLATE_STRING_IF_INVALID + default_value = context.engine.string_if_invalid def render_value(key): if key in context: diff --git a/tests/template_tests/tests.py b/tests/template_tests/tests.py index 397c6c4e11..18c2e1703c 100644 --- a/tests/template_tests/tests.py +++ b/tests/template_tests/tests.py @@ -12,8 +12,7 @@ from django import template from django.conf import settings from django.contrib.auth.models import Group from django.core import urlresolvers -from django.template import (base as template_base, loader, Context, - RequestContext, Template, TemplateSyntaxError) +from django.template import loader, Context, RequestContext, Template, TemplateSyntaxError from django.template.engine import Engine from django.template.loaders import app_directories, filesystem from django.test import RequestFactory, TestCase @@ -550,14 +549,15 @@ class TemplateTests(TestCase): failures = [] tests = sorted(template_tests.items()) - # Set TEMPLATE_STRING_IF_INVALID to a known string. - expected_invalid_str = 'INVALID' - # Warm the URL reversing cache. This ensures we don't pay the cost # warming the cache during one of the tests. urlresolvers.reverse('named.client', args=(0,)) for name, vals in tests: + + # Set TEMPLATE_STRING_IF_INVALID to a known string. + expected_invalid_str = 'INVALID' + if isinstance(vals[2], tuple): normal_string_result = vals[2][0] invalid_string_result = vals[2][1] @@ -565,7 +565,6 @@ class TemplateTests(TestCase): if isinstance(invalid_string_result, tuple): expected_invalid_str = 'INVALID %s' invalid_string_result = invalid_string_result[0] % invalid_string_result[1] - template_base.invalid_var_format_string = True try: template_debug_result = vals[2][2] @@ -622,10 +621,6 @@ class TemplateTests(TestCase): Engine.get_default().template_loaders[0].reset() - if template_base.invalid_var_format_string: - expected_invalid_str = 'INVALID' - template_base.invalid_var_format_string = False - self.assertEqual(failures, [], "Tests failed:\n%s\n%s" % ('-' * 70, ("\n%s\n" % ('-' * 70)).join(failures)))