在Jinja2中测试列表

时间:2012-08-14 07:04:41

标签: python jinja2

据我所知,没有办法测试对象是否是Jinja2中的List实例。首先,这是正确的吗?其次,是否有人在Jinja2中实现了自定义测试/扩展?任何帮助都会很棒。

4 个答案:

答案 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 %}