Created
May 4, 2012 04:33
-
-
Save SmileyChris/2592044 to your computer and use it in GitHub Desktop.
Silent invalid arguments -> None
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/django/template/base.py b/django/template/base.py | |
index ab44bfb..3567756 100644 | |
--- a/django/template/base.py | |
+++ b/django/template/base.py | |
@@ -551,9 +551,9 @@ class FilterExpression(object): | |
args = [] | |
constant_arg, var_arg = match.group("constant_arg", "var_arg") | |
if constant_arg: | |
- args.append((False, Variable(constant_arg).resolve({}))) | |
+ args.append(mark_safe(Variable(constant_arg).resolve({}))) | |
elif var_arg: | |
- args.append((True, Variable(var_arg))) | |
+ args.append(Variable(var_arg)) | |
filter_func = parser.find_filter(filter_name) | |
self.args_check(filter_name, filter_func, args) | |
filters.append((filter_func, args)) | |
@@ -565,32 +565,34 @@ class FilterExpression(object): | |
self.filters = filters | |
self.var = var_obj | |
+ def resolve_var(self, var, context, ignore_failures=False): | |
+ if not isinstance(var, Variable): | |
+ return var | |
+ try: | |
+ return var.resolve(context) | |
+ except VariableDoesNotExist: | |
+ if ignore_failures: | |
+ return None | |
+ raise | |
+ | |
def resolve(self, context, ignore_failures=False): | |
- if isinstance(self.var, Variable): | |
- try: | |
- obj = self.var.resolve(context) | |
- except VariableDoesNotExist: | |
- 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 | |
- else: | |
- obj = settings.TEMPLATE_STRING_IF_INVALID | |
- else: | |
- obj = self.var | |
+ try: | |
+ obj = self.resolve_var(self.var, context, ignore_failures) | |
+ except VariableDoesNotExist: | |
+ 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 | |
+ else: | |
+ obj = settings.TEMPLATE_STRING_IF_INVALID | |
for func, args in self.filters: | |
arg_vals = [] | |
- for lookup, arg in args: | |
- if not lookup: | |
- arg_vals.append(mark_safe(arg)) | |
- else: | |
- arg_vals.append(arg.resolve(context)) | |
+ for arg in args: | |
+ arg_vals.append(self.resolve_var(arg, context, | |
+ ignore_failures=True)) | |
if getattr(func, 'expects_localtime', False): | |
obj = template_localtime(obj, context.use_tz) | |
if getattr(func, 'needs_autoescape', False): | |
@@ -853,6 +855,8 @@ def _render_value_in_context(value, context): | |
means escaping, if required, and conversion to a unicode object. If value | |
is a string, it is expected to have already been translated. | |
""" | |
+ if value is None: | |
+ return u'' | |
value = template_localtime(value, use_tz=context.use_tz) | |
value = localize(value, use_l10n=context.use_l10n) | |
value = force_unicode(value) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment