diff options
| author | Craig Oldford <cj1982@gmail.com> | 2015-04-13 12:27:30 -0300 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-04-14 07:19:47 -0400 |
| commit | 75bc5bc634e90d5ccd2d7fc324df878dc5d4ce5d (patch) | |
| tree | 31e9c1157b5df93e1da9ecf5d3c9d7208d4868dc /django/template | |
| parent | 6023312dde022d31d44373e8834431456095dc7c (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.py | 18 |
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') |
