diff --git a/tests/test_templates.py b/tests/test_templates.py index 017e2ec07..b8849ee86 100644 --- a/tests/test_templates.py +++ b/tests/test_templates.py @@ -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' diff --git a/wcs/qommon/templatetags/qommon.py b/wcs/qommon/templatetags/qommon.py index a85d1dff3..67a3ec721 100644 --- a/wcs/qommon/templatetags/qommon.py +++ b/wcs/qommon/templatetags/qommon.py @@ -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)