misc: add |sum template filter (#56380)
This commit is contained in:
parent
9050ab6cd2
commit
e717381c85
|
@ -725,3 +725,14 @@ def extra_context(cell, request):
|
|||
if hasattr(cell, 'repeat_index'):
|
||||
ctx['repeat_index'] = cell.repeat_index
|
||||
return ctx
|
||||
|
||||
|
||||
@register.filter(name='sum')
|
||||
def sum_(list_):
|
||||
if isinstance(list_, str):
|
||||
# do not consider string as iterable, to avoid misusage
|
||||
return ''
|
||||
try:
|
||||
return sum(parse_decimal(term) for term in list_)
|
||||
except TypeError: # list_ is not iterable
|
||||
return ''
|
||||
|
|
|
@ -894,3 +894,16 @@ def test_django_contrib_humanize_filters():
|
|||
with override_settings(LANGUAGE_CODE='fr-fr'):
|
||||
assert tmpl.render(Context({'foo': 10000})) == '10 000'
|
||||
assert tmpl.render(Context({'foo': '10000'})) == '10 000'
|
||||
|
||||
|
||||
def test_sum():
|
||||
t = Template('{{ "2 29.5 9,5 .5"|split|sum }}')
|
||||
assert t.render(Context()) == '41.5'
|
||||
t = Template('{{ list|sum }}')
|
||||
assert t.render(Context({'list': [1, 2, '3']})) == '6'
|
||||
assert t.render(Context({'list': [1, 2, 'x']})) == '3'
|
||||
assert t.render(Context({'list': [None, 2.0, 'x']})) == '2'
|
||||
assert t.render(Context({'list': []})) == '0'
|
||||
assert t.render(Context({'list': None})) == '' # list is not iterable
|
||||
assert t.render(Context({'list': '123'})) == '' # consider string as not iterable
|
||||
assert t.render(Context()) == ''
|
||||
|
|
Loading…
Reference in New Issue