Per quanto posso vedere, non c'è modo di verificare se un oggetto è un'istanza List in Jinja2. In primo luogo, è corretto e in secondo luogo, qualcuno ha implementato un test/estensione personalizzato in Jinja2? Qualsiasi aiuto sarebbe grande.Test per un elenco in Jinja2
risposta
Si può facilmente fare questo con un filtro personalizzato in jinja2.
Prima si crea metodo di prova:
def is_list(value):
return isinstance(value, list)
e aggiungerlo come un filtro personalizzato:
j = jinja2.Jinja2(app)
j.environment.filters.update({
'is_list': is_list,
})
Jinja ha molti test builtin. Probabilmente stai cercando iterable.
{% if var is iterable %}
ho fatto come questo {% if var is iterable and var is not string %}
nel mio caso '{% se var is string%}' ha funzionato perfettamente; grazie. – berto
Nella mia messa a punto, mi piacerebbe per un valore ad essere o una stringa o lista di stringhe che entrano nel modello di Jinja. Quindi quello che mi importava di più non era la stringa vs la lista, ma il singolo elemento rispetto a più oggetti. Questa risposta potrebbe essere utile se il tuo caso d'uso è simile.
Poiché non esiste un test integrato per "è l'elenco?" che rifiuta anche le stringhe, ho preso in prestito un modello dal design dell'API e ho avvolto i singoli oggetti in una lista sul lato Python, quindi ho controllato la lunghezza dell'elenco sul lato Jinja.
Python:
context = { ... }
# ex. value = 'a', or ['a', 'b']
if not isinstance(value, list):
value = [value]
context['foo'] = value
Jinja:
{% if foo|length == 1 %}
single-item list
{% elif foo|length > 1 %}
multi-item list
{% endif %}
E se tutto quello che volete fare è aggiungere un separatore di oggetto per la visualizzazione, è possibile saltare la verifica lunghezza esplicita e solo {{ value|join(', ') }}
.
Sembra che questa risposta abbia ricevuto un downvote per qualche motivo. Funziona bene per me, ma sentiti libero di aggiungere un commento se qualcosa non funziona per te. –
- 1. Python jinja2 template, come contare un elenco
- 2. È possibile appiattire un elenco di liste con Ansible/Jinja2?
- 3. Jinja2: format + unire gli elementi di un elenco
- 4. NamedTuples in macro modello Jinja2
- 5. Aggiungi quota attorno a ogni stringa in un elenco in jinja2?
- 6. valore predefinito per dizionario in jinja2 (ansible)
- 7. citazioni Escaping in Jinja2
- 8. concat multiplo in jinja2?
- 9. Esiste un approccio diretto per formattare i numeri in jinja2?
- 10. Arrotondamento in parentesi jinja2
- 11. Elenchi concatenati in JINJA2
- 12. Jinja2 Template - per il ciclo
- 13. La lista dei filtri Jinja2 usando la stringa contiene test
- 14. Jinja2 commenti in linea
- 15. Tidy per i modelli Jinja2
- 16. webapp2 + jinja2: Come posso ottenere uri_for() lavorando in jinja2-views
- 17. Copertura del codice per i modelli Jinja2
- 18. intervallo in jinja2 all'interno di un ciclo for
- 19. ordine di test unità di articoli in un elenco
- 20. Iterate sopra l'oggetto in Jinja2?
- 21. Modifica attributi dizionario in jinja2
- 22. Pybabel genera un file vuoto con jinja2
- 23. Copertura del codice per i modelli jinja2 in Django
- 24. commenti non lavorano in Jinja2
- 25. Impossibile disabilitare l'autoescape in jinja2
- 26. Come pluralizzare un nome in un modello con jinja2?
- 27. Ordina dt in jinja2 loop
- 28. C'è un modo per ripulire l'html prodotto da jinja2?
- 29. C'è un modo per trasmettere le variabili ai genitori Jinja2?
- 30. Applicazione di filtri jinja2 a un blocco?
Una stringa è anche iterabile, quindi non funziona – pors
Ho notato anche il test 'sequence' ma considera anche una stringa una sequenza. –