web-dev-qa-db-ja.com

jinja2テンプレートのリストの長さを取得する

Jinja2テンプレートのリストの要素数を取得するにはどうすればいいですか?

例えば、Pythonでは:

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

とjinja2で

<span>You have {{what goes here?}} products</span>
254
flybywire
<span>You have {{products|length}} products</span>

この構文は、次のような式でも使用できます。

{% if products|length > 1 %}

jinja2の組み込みフィルタは文書化されています ここ ;具体的には、すでに説明したように、 length (およびその同義語count)は次のように文書化されています。

シーケンスまたはマッピングの項目数を返します。

そのため、テンプレートにある{{products|count}}(または同等の{{products|length}})は、「商品数」(「リストの長さ」)になります。

438
Alex Martelli

Alexのコメントはよさそうだが、私はまだ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 %}
6
Ashwin

長さがNoneの問題が発生したため、内部サーバーエラーが発生しました:TypeError:タイプ 'NoneType'のオブジェクトにはlen()がありません

私の回避策は、オブジェクトがNoneの場合に0を表示し、私の場合のリストのような他のタイプの長さを計算することです:

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