Obtenha comprimentos de uma lista em um modelo Jinja2
Pergunta
Como obtenho o número de elementos em uma lista no modelo Jinja2?
Por exemplo, em Python:
print(template.render(products=[???]))
e em Jinja2
<span>You have {{what goes here?}} products</span>
Solução
<span>You have {{products|length}} products</span>
Você também pode usar essa sintaxe em expressões como
{% if products|length > 1 %}
Os filtros embutidos do Jinja2 estão documentados aqui; e especificamente, como você já encontrou, length
(e seu sinônimo count
) está documentado para:
Retorne o número de itens de uma sequência ou mapeamento.
Então, novamente como você encontrou, {{products|count}}
(ou equivalente {{products|length}}
) em seu modelo fornecerá o "número de produtos" ("comprimento da lista")
Outras dicas
O comentário de Alex parece bom, mas eu ainda estava confuso com o uso do alcance. O seguinte funcionou para mim enquanto trabalhava em uma condição para o comprimento do alcance.
{% 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 %}
Eu experimentei um problema com o comprimento de nenhum, o que leva ao erro interno do servidor: TypeError: Objeto do tipo 'NonType' não tem Len ()
Minha solução alternativa está apenas exibindo 0 se o objeto não for e calcular a duração de outros tipos, como a lista no meu caso:
{{'0' if linked_contacts == None else linked_contacts|length}}