misc: avoid crashes when getlist filter not used on a block (#45634)

This commit is contained in:
Thomas NOËL 2020-07-31 10:06:05 +02:00
parent 6f763c4045
commit 74b62af6d7
2 changed files with 17 additions and 0 deletions

View File

@ -952,3 +952,18 @@ def test_sum():
assert tmpl.render({'list': None}) == '' # list is not iterable
assert tmpl.render({'list': '123'}) == '' # consider string as not iterable
assert tmpl.render({}) == ''
def test_getlist():
class FakeBlock:
def getlist(self, key):
return {'foo': ['foo1', 'foo2'], 'bar': ['bar1', 'bar2']}[key]
tmpl = Template('{% for x in egg|getlist:coin %}{{x}}{% endfor %}')
assert tmpl.render({'egg': FakeBlock(), 'coin': 'foo'}) == 'foo1foo2'
assert tmpl.render({'egg': FakeBlock(), 'coin': 'bar'}) == 'bar1bar2'
tmpl = Template('{{ egg|getlist:"foo"|length }}')
assert tmpl.render({'egg': FakeBlock()}) == '2'
assert tmpl.render({}) == '0'
assert tmpl.render({'egg': None}) == '0'
assert tmpl.render({'egg': 'spam'}) == '0'
assert tmpl.render({'egg': 42}) == '0'

View File

@ -65,6 +65,8 @@ def get(mapping, key):
@register.filter
def getlist(mapping, key):
if not mapping or not hasattr(mapping, 'getlist'):
return []
return mapping.getlist(key)