From 2cebe4395e9ed345bbbe346b91842b4c97ffcfc7 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Mon, 12 Apr 2010 13:56:38 +0000 Subject: [PATCH] Refs #13167 -- Corrected a regression in the way non-existent variables are handled by {% if %} tags. Thanks to ohmi2 for pointing out the regression in 1.2, and Karen for the patch. git-svn-id: http://code.djangoproject.com/svn/django/trunk@12954 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/template/defaulttags.py | 7 ++++++- tests/regressiontests/templates/tests.py | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) 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 #########################################################