Как вы сортируете список в Jinja2?

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

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

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

Ответ 1

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

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

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

Ответ 2

Обычно мы сортируем список, прежде чем передавать его Jinja2. Нет способа указать ключ в фильтре Jinja 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 для примера.

Ответ 3

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

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

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

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