在jinja2模板中获取列表的长度

fly*_*ire 288 python jinja2

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

例如,在Python中:

print(template.render(products=[???]))
Run Code Online (Sandbox Code Playgroud)

在jinja2

<span>You have {{what goes here?}} products</span>
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 485

<span>You have {{products|length}} products</span>
Run Code Online (Sandbox Code Playgroud)

您也可以在表达式中使用此语法

{% if products|length > 1 %}
Run Code Online (Sandbox Code Playgroud)

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

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

所以,再次如您所发现的,{{products|count}}(或等效地{{products|length}})在您的模板中将给出"产品数量"("列表长度")

  • @wvxvw 这确实有效:`{% set item_count = items | length %}` 只要 `items` 是列表、字典等。 (3认同)

Ash*_*win 6

亚历克斯的评论看起来不错,但我仍然对使用范围感到困惑.以下工作适用于使用范围内长度的条件.

{% 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 %}
Run Code Online (Sandbox Code Playgroud)


小智 6

我遇到过 None 长度问题,这会导致内部服务器错误: TypeError: object of type 'NoneType' has no len()

我的解决方法是如果对象为 None 则显示 0 并计算其他类型的长度,例如我的情况下的列表:

{{'0' if linked_contacts == None else linked_contacts|length}}
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用 **none** 内置函数来测试 _None_。在此处查看更多信息:[https://jinja.palletsprojects.com/en/2.10.x/templates/#none](https://jinja.palletsprojects.com/en/2.10.x/templates/#none)。示例在此线程上:[/sf/ask/1372981921/](/sf/ 19614027/jinja2-模板变量-如果-无-对象-设置-默认值) (3认同)

小智 6

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

{% for i in range(array|length) %}
          array[i]
{% endfor %}
Run Code Online (Sandbox Code Playgroud)