From d0b44c44ef6ac8b6a7e332b83b9932f23dee41fd Mon Sep 17 00:00:00 2001 From: Roger Gammans Date: Thu, 25 Jan 2018 12:14:44 +0000 Subject: [PATCH] Fixed #29060 -- Made {% firstof %} assign '' to the asvar if all inputs are false. --- django/template/defaulttags.py | 11 ++++++----- tests/template_tests/syntax_tests/test_firstof.py | 7 +++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index abb72fa13c..6e52249584 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -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) - if self.asvar: - context[self.asvar] = first - return '' - return first - return '' + break + if self.asvar: + context[self.asvar] = first + return '' + return first class ForNode(Node): diff --git a/tests/template_tests/syntax_tests/test_firstof.py b/tests/template_tests/syntax_tests/test_firstof.py index 1f382a6db3..cc8df211eb 100644 --- a/tests/template_tests/syntax_tests/test_firstof.py +++ b/tests/template_tests/syntax_tests/test_firstof.py @@ -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, '')