templatetags: introduce |list, to turn a generator into a list (#54807)

This commit is contained in:
Frédéric Péters 2021-06-13 07:39:38 +02:00
parent 822e3311a2
commit 1e13d82e8e
2 changed files with 22 additions and 0 deletions

View File

@ -1174,3 +1174,19 @@ def test_is_empty():
assert tmpl.render({'foo': ['foo']}) == 'False'
assert tmpl.render({'foo': {}}) == 'True'
assert tmpl.render({'foo': {'foo': 42}}) == 'False'
def test_convert_as_list():
tmpl = Template('{{ foo|list|first }}')
assert tmpl.render({'foo': ['foo']}) == 'foo'
def list_generator():
for i in range(5):
yield i
assert tmpl.render({'foo': list_generator}) == '0'
def list_range():
return range(5)
assert tmpl.render({'foo': list_range}) == '0'

View File

@ -791,3 +791,9 @@ def is_empty(value):
@register.filter
def strip_metadata(value):
return unlazy(value).strip_metadata()
@register.filter(name='list')
def list_(value):
# turn a generator into a list
return list(unlazy(value))