misc: avoid crashes when getlist filter not used on a block (#45634)
This commit is contained in:
parent
6f763c4045
commit
74b62af6d7
|
@ -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'
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue