web-dev-qa-db-fra.com

Comment trier une liste dans Jinja2?

J'essaye de faire ça:

 {% for movie in movie_list | sort(movie.rating) %}

Mais ce n'est pas vrai ... la documentation est vague ... comment faites-vous cela dans Jinja2?

72
Nick Perkins

Depuis la version 2.6, le filtre de tri intégré de Jinja2 vous permet de spécifier un attribut à trier par:

{% for movie in movie_list|sort(attribute='rating') %}

Voir http://jinja.pocoo.org/docs/templates/#sort

135
Steve S

Si vous souhaitez trier par ordre croissant

{% for movie in movie_list|sort(attribute='rating') %}

Si vous souhaitez trier par ordre décroissant

{% for movie in movie_list|sort(attribute='rating', reverse = True) %}
14
SumanKalyan

Habituellement, nous trions la liste avant de la donner à Jinja2. Il n'y a aucun moyen de spécifier une clé dans le filtre sort de Jinja.

Cependant, vous pouvez toujours essayer {% for movie in movie_list|sort %}. Voilà la syntaxe. Vous ne pouvez fournir aucune sorte d'informations clés pour le tri.

Vous pouvez également essayer d'écrire un filtre personnalisé pour cela. Cela semble idiot quand vous pouvez trier avant de donner les données à Jinja2.

Si movie_list est une liste d'objets, vous pouvez alors définir les différentes méthodes de comparaison (__lt__, __gt__, etc.) pour la classe de ces objets.

Si movie_list est une liste de tuples ou de listes, la note doit être la première. Ou vous devrez faire le tri en dehors de Jinja2.

Si movie_list est une liste de dictionnaires, vous pouvez alors utiliser dictsort, qui accepte une spécification de clé pour le tri. Lisez ceci: http://jinja.pocoo.org/2/documentation/templates#dictsort pour un exemple.

12
S.Lott