Ottieni lunghezze di un elenco in un modello jinja2


315

Come posso ottenere il numero di elementi in un elenco nel modello jinja2?

Ad esempio, in Python:

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

e in jinja2

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

Risposte:


533
<span>You have {{products|length}} products</span>

Puoi anche usare questa sintassi in espressioni come

{% if products|length > 1 %}

I filtri integrati di jinja2 sono documentati qui ; e in particolare, come hai già trovato, length(e il suo sinonimo count) è documentato a:

Restituisce il numero di elementi di una sequenza o mappatura.

Quindi, di nuovo come hai trovato, {{products|count}}(o equivalentemente {{products|length}}) nel tuo modello fornirà il "numero di prodotti" ("lunghezza dell'elenco")


Possiamo verificare anche se non definito? Devo usare {% se i prodotti non sono nessuno ...%} che è abbastanza stancante
Nam G VU

@wvxvw questo funziona: {% set item_count = items | length %}fintanto che itemsè un elenco, dict, ecc
kbolino

7

Il commento di Alex sembra buono ma ero ancora confuso con l'utilizzo di range. Quanto segue ha funzionato per me mentre lavoravo su una condizione for usando la lunghezza nel raggio d'azione.

{% 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 %}

2

Ho riscontrato un problema con la lunghezza di None, che porta all'errore interno del server: TypeError: l'oggetto di tipo 'NoneType' non ha len ()

La mia soluzione alternativa è solo visualizzare 0 se l'oggetto è Nessuno e calcolare la lunghezza di altri tipi, come l'elenco nel mio caso:

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

È possibile utilizzare nessuna funzione integrata per verificare la presenza di Nessuno . Controlla di più qui: https://jinja.palletsprojects.com/en/2.10.x/templates/#none . L'esempio è su questa discussione: /programming/19614027/jinja2-template-variable-if-none-object-set-a-default-value
Wojciech Jakubas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.