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

例如在Python中:

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


和jinja2

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


#1 楼

您也可以在类似表达式的表达式中使用此语法。具体来说,正如您已经发现的,length(及其同义词count)记录为:


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


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

评论


我们也可以检查未定义的吗?我必须使用{%如果产品为空...%},这很累

– Nam G VU
17年8月21日在4:28

@wvxvw,这确实有效:{%set item_count = items |长度%},只要项目是列表,字典等即可。

– kbolino
19年5月14日在17:51

谢谢@AlexMartelli。另外,我们可以使用{{form.select_field(size = 5 if form.select_field.choices | count> 5 else form.select_field.choices | count)}}等内联语法

–Filipe Bezerra de Sousa
20-6-28 at 23:52

#2 楼

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


#3 楼

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

如果对象为None并且我的解决方法只是显示0,计算其他类型的长度,例如我的清单:

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


评论


您可以使用none内置函数来测试None。在此处查看更多信息:https://jinja.palletsprojects.com/en/2.10.x/templates/#none。该线程上的示例:https://stackoverflow.com/questions/19614027/jinja2-template-variable-if-none-object-set-a-default-value

– Wojciech Jakubas
19/12/17在16:50