【问题标题】:Get lengths of a list in a jinja2 template获取 jinja2 模板中列表的长度
【发布时间】:2010-11-30 17:12:58
【问题描述】:

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

例如,在 Python 中:

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

在 jinja2 中

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

【问题讨论】:

    标签: python jinja2


    【解决方案1】:
    <span>You have {{products|length}} products</span>
    

    你也可以在表达式中使用这种语法

    {% if products|length > 1 %}
    

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

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

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

    【讨论】:

    • 我们也可以检查 undefined 吗?我必须使用 {% if products is none ... %} 这很累
    • @wvxvw 这确实有效:{% set item_count = items | length %} 只要items 是一个列表、字典等。
    • 谢谢@AlexMartelli。另外我们可以使用像{{ form.select_field(size=5 if form.select_field.choices|count &gt; 5 else form.select_field.choices|count) }}这样的内联语法
    【解决方案2】:

    Alex 的评论看起来不错,但我仍然对使用范围感到困惑。 在使用范围内的长度处理 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 %}
    

    【讨论】:

    • 你可以用pythonic方式循环你的集合:{% for user in nums['list_users_response']['list_users_result']['users'] %} &lt;li&gt;{{ user['user_name'] }} &lt;/li&gt; {% endfor %}
    【解决方案3】:

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

    如果 object 为 None,我的解决方法只是显示 0 并计算其他类型的长度,比如我的例子中的 list:

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

    【讨论】:

    【解决方案4】:

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

    {% for i in range(array|length) %}
              array[i]
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2012-10-19
      • 2019-09-29
      • 1970-01-01
      相关资源
      最近更新 更多