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

Nic*_*ins 78 python sorting jinja2

我想这样做:

 {% for movie in movie_list | sort(movie.rating) %}
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*e S 143

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

{% for movie in movie_list|sort(attribute='rating') %}
Run Code Online (Sandbox Code Playgroud)

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

  • 很好,这也适用于元组索引:`list_of_tuples | sort(attribute ='0')` (2认同)

Sum*_*yan 19

如果要按升序排序

{% for movie in movie_list|sort(attribute='rating') %}
Run Code Online (Sandbox Code Playgroud)

如果要按降序排序

{% for movie in movie_list|sort(attribute='rating', reverse = True) %}
Run Code Online (Sandbox Code Playgroud)


S.L*_*ott 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作为示例.

  • Jinja2的最新版本现在允许指定要排序的属性. (2认同)
  • 小更正:检查 [source](https://github.com/pallets/jinja/blob/master/jinja2/filters.py#L55) 后,我发现可以指定索引,以防您的列表是由元组组成(例如由`dict.items()`返回):`sort(attribut='1')` (2认同)