Como você classifica uma lista em Jinja2?
Pergunta
Estou tentando fazer isso:
{% for movie in movie_list | sort(movie.rating) %}
Mas isso não está certo ... a documentação é vaga ... como você faz isso no Jinja2?
Solução
A partir da versão 2.6, o filtro de classificação interno do Jinja2 permite especificar um atributo para classificar por:
{% for movie in movie_list|sort(attribute='rating') %}
Outras dicas
Se você quiser classificar em ordem crescente
{% for movie in movie_list|sort(attribute='rating') %}
Se você quiser classificar em ordem decrescente
{% for movie in movie_list|sort(attribute='rating', reverse = True) %}
Normalmente, classificamos a lista antes de dar a Jinja2. Não há como especificar uma chave no Jinja's sort
filtro.
No entanto, você sempre pode tentar {% for movie in movie_list|sort %}
. Essa é a sintaxe. Você não fornece nenhum tipo de informação -chave para a classificação.
Você também pode tentar escrever um filtro personalizado para isso. Parece bobo quando você pode classificar antes de fornecer os dados para Jinja2.
Se movie_list
é uma lista de objetos, então você pode definir os vários métodos de comparação (__lt__
, __gt__
, etc.) para a classe desses objetos.
Se movie_list
é uma lista de tuplas ou listas, a classificação deve ser a primeira. Ou você terá que fazer a classificação fora do Jinja2.
Se movie_list
é uma lista de dicionários, então você pode usar dictsort
, que aceita uma especificação chave para a classificação. Leia isso: http://jinja.pocoo.org/2/documentation/templates#dictsort Por exemplo.