estoy tratando de hacer esto:¿Cómo se ordena una lista en Jinja2?
{% for movie in movie_list | sort(movie.rating) %}
Pero eso no está bien ... la documentación es vago ... ¿cómo se hace esto en Jinja2?
estoy tratando de hacer esto:¿Cómo se ordena una lista en Jinja2?
{% for movie in movie_list | sort(movie.rating) %}
Pero eso no está bien ... la documentación es vago ... ¿cómo se hace esto en Jinja2?
partir de la versión 2.6, filtro de tipo incorporado en Jinja2 le permite especificar un atributo para ordenar por:
{% for movie in movie_list|sort(attribute='rating') %}
Normalmente ordenamos la lista antes de dársela a Jinja2. No hay forma de especificar una clave en el filtro sort
de Jinja.
Sin embargo, siempre puedes probar {% for movie in movie_list|sort %}
. Esa es la sintaxis. No puede proporcionar ningún tipo de información clave para la clasificación.
También puede intentar y escribir un filtro personalizado para esto. Parece tonto cuando puedes ordenar antes de dar los datos a Jinja2.
Si movie_list
es una lista de los objetos, a continuación, se pueden definir los diferentes métodos de comparación (__lt__
, __gt__
, etc.) para la clase de esos objetos.
Si movie_list
es una lista de tuplas o listas, la evaluación debe ser primero. O tendrás que hacer la clasificación fuera de Jinja2.
Si movie_list
es una lista de diccionarios, puede usar dictsort
, que acepta una especificación de clave para la ordenación. Lea esto: http://jinja.pocoo.org/2/documentation/templates#dictsort para un ejemplo.
Ok, gracias. terminé ordenando en Python antes de enviar a la plantilla: movie_list = sorted(movie_list, key = lambda movie:movie.rating, reverse = True)
Lástima, sería bueno dejar que la plantilla decida el orden de clasificación. (podrían otros motores de plantillas hacer esto?) –
Las versiones recientes de Jinja2 ahora permiten especificar un atributo por el que ordenar. –
@Steve S: Interesante. ¿Podría publicar una ** respuesta ** con su nueva información? Incluya el número de versión, por favor. –
Si desea ordenar en orden ascendente
{% for movie in movie_list|sort(attribute='rating') %}
Si desea ordenar en orden descendente
{% for movie in movie_list|sort(attribute='rating', reverse = True) %}
Gracias, eso es exactamente lo que quería. Por cierto, ¿funciona con ambos tipos de atributos ... sabes __getattr__ y __getitem__? (porque no recuerdo si las "películas" eran objetos o diccionarios) –
@Nick: Hice una prueba rápida, y pareció funcionar tanto con objetos como con dictados. –