2009-12-24 123 views

回答

105

隨着2.6版本,Jinja2的內置的排序過濾器允許您指定的屬性排序:

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

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

+0

謝謝,這正是我想要的。順便說一下,它是否適用於這兩種類型的屬性......你知道__getattr__和__getitem__? (因爲我不記得「電影」是否是對象或字典) – 2011-03-31 23:28:59

+0

@Nick:我做了一個快速測試,似乎可以同時使用對象和字典。 – 2011-04-01 15:39:20

11

通常我們在將它給予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爲例。

+0

好的,謝謝。 在發送到模板之前,我確實最終在Python中排序: movie_list = sorted(movie_list, key = lambda movie:movie.rating, reverse = True) 太糟糕了,讓模板決定排序順序可能會很好! (其他模板引擎可以這樣做嗎?) – 2009-12-27 21:59:32

+1

最近版本的Jinja2現在允許指定一個屬性進行排序。 – 2011-03-30 14:47:15

+1

@Steve S:有趣。你真的可以用你的新信息發佈**答案**嗎?請包含版本號。 – 2011-03-30 17:39:03

7

如果你想按升序排序

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

如果要按降序排列

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