415

如何获取 jinja2 模板中列表中的元素数量?

例如,在 Python 中:

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

在 jinja2

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

4 回答 4

711
<span>You have {{products|length}} products</span>

您还可以在表达式中使用此语法,例如

{% if products|length > 1 %}

jinja2 的内置过滤器记录在这里;具体来说,正如您已经发现的那样,length(及其同义词count)记录在:

返回序列或映射的项目数。

因此,再次如您所见,{{products|count}}(或等效地{{products|length}})在您的模板中将给出“产品数量”(“列表长度”)

于 2009-09-23T14:55:54.437 回答
13

亚历克斯的评论看起来不错,但我仍然对使用范围感到困惑。在使用范围内的长度处理 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 %}
于 2016-09-22T10:13:41.647 回答
5

我遇到了长度为 None 的问题,这会导致内部服务器错误:TypeError: 'NoneType' 类型的对象没有 len()

我的解决方法只是在 object 为 None 时显示 0 并计算其他类型的长度,例如我的例子中的 list:

{{'0' if linked_contacts == None else linked_contacts|length}}
于 2019-07-04T21:26:10.717 回答
1

如果使用带有数组的 for 循环,那么您可以使用以下内容

{% for i in range(array|length) %}
          array[i]
{% endfor %}
于 2022-01-02T06:21:53.467 回答