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()がありません

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

{{'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 に答える