diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 4faa334af3..2ba23a0465 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -517,8 +517,14 @@ def firstof(parser, token): {% endif %}{% endif %}{% endif %} but obviously much cleaner! + + You can also use a literal string as a fallback value in case all + passed variables are False:: + + {% firstof var1 var2 var3 "fallback value" %} + """ - bits = token.contents.split()[1:] + bits = token.split_contents()[1:] if len(bits) < 1: raise TemplateSyntaxError, "'firstof' statement requires at least one argument" return FirstOfNode(bits) diff --git a/docs/templates.txt b/docs/templates.txt index eab4b129ce..5d5f657747 100644 --- a/docs/templates.txt +++ b/docs/templates.txt @@ -476,6 +476,11 @@ This is equivalent to:: {{ var3 }} {% endif %}{% endif %}{% endif %} +You can also use a literal string as a fallback value in case all +passed variables are False:: + + {% firstof var1 var2 var3 "fallback value" %} + for ~~~ diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index 0c851d5f78..a011248210 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -341,7 +341,10 @@ class Templates(unittest.TestCase): 'firstof03': ('{% firstof a b c %}', {'a':0,'b':2,'c':0}, '2'), 'firstof04': ('{% firstof a b c %}', {'a':0,'b':0,'c':3}, '3'), 'firstof05': ('{% firstof a b c %}', {'a':1,'b':2,'c':3}, '1'), - 'firstof06': ('{% firstof %}', {}, template.TemplateSyntaxError), + 'firstof06': ('{% firstof a b c %}', {'b':0,'c':3}, '3'), + 'firstof07': ('{% firstof a b "c" %}', {'a':0}, 'c'), + 'firstof08': ('{% firstof a b "c and d" %}', {'a':0,'b':0}, 'c and d'), + 'firstof09': ('{% firstof %}', {}, template.TemplateSyntaxError), ### FOR TAG ############################################################### 'for-tag01': ("{% for val in values %}{{ val }}{% endfor %}", {"values": [1, 2, 3]}, "123"),