据我所知,没有办法测试对象是否是Jinja2中的List实例。首先,这是正确的吗?其次,是否有人在Jinja2中实现了自定义测试/扩展?任何帮助都会很棒。
答案 0 :(得分:38)
我是这样做的:
{% if var is iterable and var is not string %}
答案 1 :(得分:12)
您可以使用jinja2中的自定义过滤器轻松完成此操作。
首先创建测试方法:
def is_list(value):
return isinstance(value, list)
并将其添加为自定义过滤器:
j = jinja2.Jinja2(app)
j.environment.filters.update({
'is_list': is_list,
})
答案 2 :(得分:1)
在我的设置中,我希望一个值可以是字符串或进入Jinja模板的字符串列表。所以我真正关心的不是字符串vs列表,而是单项与多项。如果您的用例相似,这个答案可能会有所帮助。
由于没有#34的内置测试列表?"这也拒绝了字符串,我从API设计中借用了一个模式,并将单个对象包装在Python端的列表中,然后检查Jinja端的列表长度。
的Python:
context = { ... }
# ex. value = 'a', or ['a', 'b']
if not isinstance(value, list):
value = [value]
context['foo'] = value
金贾:
{% if foo|length == 1 %}
single-item list
{% elif foo|length > 1 %}
multi-item list
{% endif %}
如果您只想添加项目分隔符以进行显示,则可以跳过显式长度检查,只需{{ value|join(', ') }}
。
答案 3 :(得分:0)
Jinja有许多内置测试。您可能正在寻找iterable。
{% if var is iterable %}