本文翻译自:Get lengths of a list in a jinja2 template
How do I get the number of elements in a list in jinja2 template? 如何获得jinja2模板中列表中的元素数?
For example, in Python: 例如,在Python中:
print(template.render(products=[???]))
and in jinja2 和在jinja2
<span>You have {{what goes here?}} products</span>
#1楼
参考:https://stackoom.com/question/69b3/获取Jinja-模板中列表的长度
#2楼
<span>You have {{products|length}} products</span>
You can also use this syntax in expressions like 您也可以在以下表达式中使用此语法
{% if products|length > 1 %}
jinja2's builtin filters are documented here ; jinja2的内置过滤器记录在这里 ; and specifically, as you've already found, length
(and its synonym count
) is documented to: 具体来说,正如您已经发现的, length
(及其同义词count
)记录为:
Return the number of items of a sequence or mapping. 返回序列或映射的项目数。
So, again as you've found, {{products|count}}
(or equivalently {{products|length}}
) in your template will give the "number of products" ("length of list") 因此,正如您所发现的,模板中的{{products|count}}
(或等效的{{products|length}}
)将给出“产品数量”(“列表长度”)
#3楼
Alex' comment looks good but I was still confused with using range. 亚历克斯的评论看起来不错,但我仍然对使用范围感到困惑。 The following worked for me while working on a for condition using length within 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 %}
#4楼
I've experienced a problem with length of None, which leads to Internal Server Error: TypeError: object of type 'NoneType' has no len() 我遇到了长度为None的问题,这导致内部服务器错误:TypeError:类型为“ NoneType”的对象没有len()
My workaround is just displaying 0 if object is None and calculate length of other types, like list in my case: 我的解决方法是,如果object为None,则显示0并计算其他类型的长度,例如我的列表:
{{'0' if linked_contacts == None else linked_contacts|length}}