Fixed #29060 -- Made {% firstof %} assign '' to the asvar if all inputs are false.
This commit is contained in:
parent
8dc675d90f
commit
d0b44c44ef
|
@ -118,15 +118,16 @@ class FirstOfNode(Node):
|
|||
self.asvar = asvar
|
||||
|
||||
def render(self, context):
|
||||
first = ''
|
||||
for var in self.vars:
|
||||
value = var.resolve(context, ignore_failures=True)
|
||||
if value:
|
||||
first = render_value_in_context(value, context)
|
||||
break
|
||||
if self.asvar:
|
||||
context[self.asvar] = first
|
||||
return ''
|
||||
return first
|
||||
return ''
|
||||
|
||||
|
||||
class ForNode(Node):
|
||||
|
|
|
@ -82,3 +82,10 @@ class FirstOfTagTests(SimpleTestCase):
|
|||
output = self.engine.render_to_string('firstof15', ctx)
|
||||
self.assertEqual(ctx['myvar'], '2')
|
||||
self.assertEqual(output, '')
|
||||
|
||||
@setup({'firstof16': '{% firstof a b c as myvar %}'})
|
||||
def test_all_false_arguments_asvar(self):
|
||||
ctx = {'a': 0, 'b': 0, 'c': 0}
|
||||
output = self.engine.render_to_string('firstof16', ctx)
|
||||
self.assertEqual(ctx['myvar'], '')
|
||||
self.assertEqual(output, '')
|
||||
|
|
Loading…
Reference in New Issue