sto cercando di fare questo:Come si ordina una lista in Jinja2?
{% for movie in movie_list | sort(movie.rating) %}
Ma non è giusto ... la documentazione è vago ... come si fa a farlo in Jinja2?
sto cercando di fare questo:Come si ordina una lista in Jinja2?
{% for movie in movie_list | sort(movie.rating) %}
Ma non è giusto ... la documentazione è vago ... come si fa a farlo in Jinja2?
A partire dalla versione 2.6, filtro tipo built-in di Jinja2 consente di specificare un attributo per l'ordinamento:
{% for movie in movie_list|sort(attribute='rating') %}
Di solito ordiniamo la lista prima di darla a Jinja2. Non c'è modo di specificare una chiave nel filtro sort
di Jinja.
Tuttavia, è sempre possibile provare {% for movie in movie_list|sort %}
. Questa è la sintassi. Non è possibile fornire alcun tipo di informazione chiave per l'ordinamento.
Si può anche provare e scrivere un filtro personalizzato per questo. Sembra sciocco quando puoi ordinare prima di dare i dati a Jinja2.
Se movie_list
è un elenco di oggetti, è possibile definire i vari metodi di confronto (__lt__
, __gt__
, ecc.) Per la classe di tali oggetti.
Se movie_list
è un elenco di tuple o elenchi, la valutazione deve essere la prima. O dovrai fare lo smistamento fuori da Jinja2.
Se movie_list
è un elenco di dizionari, è possibile utilizzare dictsort
, che accetta una specifica chiave per l'ordinamento. Leggi questo: http://jinja.pocoo.org/2/documentation/templates#dictsort per un esempio.
Ok, grazie. Ho terminato l'ordinamento in Python prima di inviarlo al modello: movie_list = sorted(movie_list, key = lambda movie:movie.rating, reverse = True)
Peccato, potrebbe essere bello lasciare che il modello decida sull'ordinamento! (altri motori di template potrebbero farlo?) –
Le versioni recenti di Jinja2 ora consentono di specificare un attributo da ordinare per. –
@Steve S: interessante. Potresti pubblicare una ** risposta ** con le tue nuove informazioni? Includi il numero di versione, per favore. –
Se si desidera ordinare in ordine crescente
{% for movie in movie_list|sort(attribute='rating') %}
Se si desidera ordinare in ordine discendente
{% for movie in movie_list|sort(attribute='rating', reverse = True) %}
Grazie, è esattamente quello che volevo. A proposito, funziona con entrambi i tipi di attributi ... sai __getattr__ e __getitem__? (perché non riesco a ricordare se i "film" fossero oggetti o dizionari) –
@Nick: ho fatto un test rapido, e sembrava funzionare sia con gli oggetti che con i dicts. –