mirror of https://github.com/django/django.git
Fixed #12199 -- Added the ability to use "as" with the firstof template tag.
This commit is contained in:
parent
6023312dde
commit
75bc5bc634
|
@ -110,14 +110,19 @@ class FilterNode(Node):
|
||||||
|
|
||||||
|
|
||||||
class FirstOfNode(Node):
|
class FirstOfNode(Node):
|
||||||
def __init__(self, variables):
|
def __init__(self, variables, asvar=None):
|
||||||
self.vars = variables
|
self.vars = variables
|
||||||
|
self.asvar = asvar
|
||||||
|
|
||||||
def render(self, context):
|
def render(self, context):
|
||||||
for var in self.vars:
|
for var in self.vars:
|
||||||
value = var.resolve(context, True)
|
value = var.resolve(context, True)
|
||||||
if value:
|
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 ''
|
return ''
|
||||||
|
|
||||||
|
|
||||||
|
@ -748,7 +753,7 @@ def firstof(parser, token):
|
||||||
|
|
||||||
Sample usage::
|
Sample usage::
|
||||||
|
|
||||||
{% firstof var1 var2 var3 %}
|
{% firstof var1 var2 var3 as myvar %}
|
||||||
|
|
||||||
This is equivalent to::
|
This is equivalent to::
|
||||||
|
|
||||||
|
@ -779,9 +784,14 @@ def firstof(parser, token):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
bits = token.split_contents()[1:]
|
bits = token.split_contents()[1:]
|
||||||
|
asvar = None
|
||||||
if len(bits) < 1:
|
if len(bits) < 1:
|
||||||
raise TemplateSyntaxError("'firstof' statement requires at least one argument")
|
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')
|
@register.tag('for')
|
||||||
|
|
|
@ -285,6 +285,13 @@ Or if only some variables should be escaped, you can use::
|
||||||
|
|
||||||
{% firstof var1 var2|safe var3 "<strong>fallback value</strong>"|safe %}
|
{% firstof var1 var2|safe var3 "<strong>fallback value</strong>"|safe %}
|
||||||
|
|
||||||
|
You can use the syntax ``{% firstof var1 var2 var3 as value %}`` to store the
|
||||||
|
output inside a variable.
|
||||||
|
|
||||||
|
.. versionadded:: 1.9
|
||||||
|
|
||||||
|
The "as" syntax was added.
|
||||||
|
|
||||||
.. templatetag:: for
|
.. templatetag:: for
|
||||||
|
|
||||||
for
|
for
|
||||||
|
|
|
@ -208,6 +208,9 @@ Templates
|
||||||
* A warning will now be logged for missing context variables. These messages
|
* A warning will now be logged for missing context variables. These messages
|
||||||
will be logged to the :ref:`django.template <django-template-logger>` logger.
|
will be logged to the :ref:`django.template <django-template-logger>` logger.
|
||||||
|
|
||||||
|
* The :ttag:`firstof` template tag supports storing the output in a variable
|
||||||
|
using 'as'.
|
||||||
|
|
||||||
Requests and Responses
|
Requests and Responses
|
||||||
^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
|
|
@ -81,3 +81,10 @@ class FirstOfTagTests(SimpleTestCase):
|
||||||
def test_firstof14(self):
|
def test_firstof14(self):
|
||||||
output = self.engine.render_to_string('firstof14', {'a': '<'})
|
output = self.engine.render_to_string('firstof14', {'a': '<'})
|
||||||
self.assertEqual(output, '<')
|
self.assertEqual(output, '<')
|
||||||
|
|
||||||
|
@setup({'firstof15': '{% firstof a b c as myvar %}'})
|
||||||
|
def test_firstof15(self):
|
||||||
|
ctx = {'a': 0, 'b': 2, 'c': 3}
|
||||||
|
output = self.engine.render_to_string('firstof15', ctx)
|
||||||
|
self.assertEqual(ctx['myvar'], '2')
|
||||||
|
self.assertEqual(output, '')
|
||||||
|
|
Loading…
Reference in New Issue