在jinja2模板中获取列表长度

467 投票
5 回答
465137 浏览
提问于 2025-04-15 14:32

我怎么在jinja2模板中获取列表的元素数量呢?

比如,在Python中:

print(template.render(products=[???]))

而在jinja2中

<span>You have {{what goes here?}} products</span>

5 个回答

7

我遇到了一个问题,就是当长度为 None 的时候,会导致内部服务器错误:TypeError: object of type 'NoneType' has no len()。

我的解决办法是,如果对象是 None,就显示 0;对于其他类型,比如列表,我会计算它们的长度:

{{'0' if linked_contacts == None else linked_contacts|length}}
16

Alex的评论看起来不错,但我还是对使用range有点困惑。在使用range结合长度进行for循环时,下面的代码对我来说是有效的。

{% for i in range(0,(nums['list_users_response']['list_users_result']['users'])| length) %}
<li>    {{ nums['list_users_response']['list_users_result']['users'][i]['user_name'] }} </li>
{% endfor %}
821
<span>You have {{products|length}} products</span>

你也可以在表达式中使用这种语法,比如

{% if products|length > 1 %}

jinja2的内置过滤器有详细的说明,可以在这里找到;特别是,正如你已经发现的,length(还有一个同义词count)的说明是:

返回一个序列或映射中的项目数量。

所以,正如你发现的那样,在你的模板中使用{{products|count}}(或者{{products|length}})会给出“产品的数量”(也就是“列表的长度”)。

撰写回答