Как вы сортируете список в Jinja2? - PullRequest
69 голосов
/ 24 декабря 2009

Я пытаюсь сделать это:

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

Но это не правильно ... документация расплывчата ... как это сделать в Jinja2?

Ответы [ 3 ]

131 голосов
/ 30 марта 2011

Начиная с версии 2.6, встроенный фильтр сортировки Jinja2 позволяет указывать атрибут сортировки по:

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

См. http://jinja.pocoo.org/docs/templates/#sort

14 голосов
/ 20 августа 2016

Если вы хотите отсортировать в порядке возрастания

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

Если вы хотите отсортировать в порядке убывания

{% for movie in movie_list|sort(attribute='rating', reverse = True) %}
12 голосов
/ 24 декабря 2009

Обычно мы сортируем список перед тем, как передать его Jinja2. Нет никакого способа указать ключ в фильтре sort Джинджи.

Однако вы всегда можете попробовать {% for movie in movie_list|sort %}. Это синтаксис. Вы не можете предоставить какую-либо ключевую информацию для сортировки.

Вы также можете попробовать написать собственный фильтр для этого. Кажется глупым, когда вы можете сортировать, прежде чем передавать данные Jinja2.

Если movie_list является списком объектов, то вы можете определить различные методы сравнения (__lt__, __gt__ и т. Д.) Для класса этих объектов.

Если movie_list является списком кортежей или списков, рейтинг должен быть первым. Или вам придется выполнить сортировку вне Jinja2.

Если movie_list - это список словарей, то вы можете использовать dictsort, который принимает спецификацию ключа для сортировки. Прочитайте это: http://jinja.pocoo.org/2/documentation/templates#dictsort для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...