diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 9dd5fb766f..96efa32c0f 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -243,7 +243,12 @@ class IfNode(Node): yield node def render(self, context): - if self.var.eval(context): + try: + var = self.var.eval(context) + except VariableDoesNotExist: + var = None + + if var: return self.nodelist_true.render(context) else: return self.nodelist_false.render(context) diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index 93ffb4da67..372d2ab1c2 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -782,6 +782,12 @@ class Templates(unittest.TestCase): 'if-tag-error11': ("{% if 1 == %}yes{% endif %}", {}, template.TemplateSyntaxError), 'if-tag-error12': ("{% if a not b %}yes{% endif %}", {}, template.TemplateSyntaxError), + # Non-existent args + 'if-tag-badarg01':("{% if x|default_if_none:y %}yes{% endif %}", {}, ''), + 'if-tag-badarg02':("{% if x|default_if_none:y %}yes{% endif %}", {'y': 0}, ''), + 'if-tag-badarg03':("{% if x|default_if_none:y %}yes{% endif %}", {'y': 1}, 'yes'), + 'if-tag-badarg04':("{% if x|default_if_none:y %}yes{% else %}no{% endif %}", {}, 'no'), + # Additional, more precise parsing tests are in SmartIfTests ### IFCHANGED TAG #########################################################