summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/template/defaulttags.py7
-rw-r--r--tests/regressiontests/templates/tests.py6
2 files changed, 12 insertions, 1 deletions
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 #########################################################