summaryrefslogtreecommitdiff
path: root/django/template
diff options
context:
space:
mode:
authorCraig Oldford <cj1982@gmail.com>2015-04-13 12:27:30 -0300
committerTim Graham <timograham@gmail.com>2015-04-14 07:19:47 -0400
commit75bc5bc634e90d5ccd2d7fc324df878dc5d4ce5d (patch)
tree31e9c1157b5df93e1da9ecf5d3c9d7208d4868dc /django/template
parent6023312dde022d31d44373e8834431456095dc7c (diff)
Fixed #12199 -- Added the ability to use "as" with the firstof template tag.
Diffstat (limited to 'django/template')
-rw-r--r--django/template/defaulttags.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py
index 6c0bf60094..60d6839ca5 100644
--- a/django/template/defaulttags.py
+++ b/django/template/defaulttags.py
@@ -110,14 +110,19 @@ class FilterNode(Node):
class FirstOfNode(Node):
- def __init__(self, variables):
+ def __init__(self, variables, asvar=None):
self.vars = variables
+ self.asvar = asvar
def render(self, context):
for var in self.vars:
value = var.resolve(context, True)
if value:
- return render_value_in_context(value, context)
+ first = render_value_in_context(value, context)
+ if self.asvar:
+ context[self.asvar] = first
+ return ''
+ return first
return ''
@@ -748,7 +753,7 @@ def firstof(parser, token):
Sample usage::
- {% firstof var1 var2 var3 %}
+ {% firstof var1 var2 var3 as myvar %}
This is equivalent to::
@@ -779,9 +784,14 @@ def firstof(parser, token):
"""
bits = token.split_contents()[1:]
+ asvar = None
if len(bits) < 1:
raise TemplateSyntaxError("'firstof' statement requires at least one argument")
- return FirstOfNode([parser.compile_filter(bit) for bit in bits])
+
+ if len(bits) >= 2 and bits[-2] == 'as':
+ asvar = bits[-1]
+ bits = bits[:-2]
+ return FirstOfNode([parser.compile_filter(bit) for bit in bits], asvar)
@register.tag('for')