你如何在Jinja2中对列表进行排序?

时间:2009-12-24 18:56:32

标签: python sorting jinja2

我正在尝试这样做:

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

但那不对......文档含糊不清......你怎么在Jinja2做到这一点?

3 个答案:

答案 0 :(得分:129)

从版本2.6开始,Jinja2的内置排序过滤器允许您指定要按以下排序的属性:

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

请参阅http://jinja.pocoo.org/docs/templates/#sort

答案 1 :(得分:14)

如果您想按升序排序

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

如果您想按降序排序

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

答案 2 :(得分:12)

通常我们会在将列表提供给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作为示例。