105

我正在尝试这样做:

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

但这不对……文档含糊不清……您如何在 Jinja2 中做到这一点?

4

3 回答 3

195

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

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

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

于 2011-03-30T17:55:47.543 回答
37

如果要按升序排序

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

如果要按降序排序

{% for movie in movie_list|sort(attribute='rating', reverse = True) %}
于 2016-08-20T06:41:16.913 回答
15

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

于 2009-12-24T19:06:26.380 回答