Я пытаюсь это сделать:
{% for movie in movie_list | sort(movie.rating) %}
Но это неправильно ... документация расплывчата ... как это сделать в Jinja2?
Я пытаюсь это сделать:
{% for movie in movie_list | sort(movie.rating) %}
Но это неправильно ... документация расплывчата ... как это сделать в Jinja2?
Ответы:
Начиная с версии 2.6, встроенный фильтр сортировки Jinja2 позволяет вам указать атрибут для сортировки:
{% for movie in movie_list|sort(attribute='rating') %}
list_of_tuples|sort(attribute='0')
reverse=True
.
Если вы хотите отсортировать по возрастанию
{% for movie in movie_list|sort(attribute='rating') %}
Если вы хотите отсортировать по убыванию
{% for movie in movie_list|sort(attribute='rating', reverse = True) %}
Обычно мы сортируем список перед тем, как передать его Jinja2. Невозможно указать ключ в sort
фильтре Jinja .
Однако всегда можно попробовать {% 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 для примера.
dict.items()
):sort(attribut='1')