From d0b44c44ef6ac8b6a7e332b83b9932f23dee41fd Mon Sep 17 00:00:00 2001
From: Roger Gammans <rgammans@gammascience.co.uk>
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, '')