我試圖做到這一點:如何在Jinja2中對列表進行排序?
{% for movie in movie_list | sort(movie.rating) %}
但是,這是不對的......文檔是模糊的......你怎麼在Jinja2的做到這一點?
我試圖做到這一點:如何在Jinja2中對列表進行排序?
{% for movie in movie_list | sort(movie.rating) %}
但是,這是不對的......文檔是模糊的......你怎麼在Jinja2的做到這一點?
隨着2.6版本,Jinja2的內置的排序過濾器允許您指定的屬性排序:
{% for movie in movie_list|sort(attribute='rating') %}
通常我們在將它給予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爲例。
好的,謝謝。 在發送到模板之前,我確實最終在Python中排序: movie_list = sorted(movie_list, key = lambda movie:movie.rating, reverse = True)
太糟糕了,讓模板決定排序順序可能會很好! (其他模板引擎可以這樣做嗎?) –
2009-12-27 21:59:32
最近版本的Jinja2現在允許指定一個屬性進行排序。 – 2011-03-30 14:47:15
@Steve S:有趣。你真的可以用你的新信息發佈**答案**嗎?請包含版本號。 – 2011-03-30 17:39:03
如果你想按升序排序
{% for movie in movie_list|sort(attribute='rating') %}
如果要按降序排列
{% for movie in movie_list|sort(attribute='rating', reverse = True) %}
謝謝,這正是我想要的。順便說一下,它是否適用於這兩種類型的屬性......你知道__getattr__和__getitem__? (因爲我不記得「電影」是否是對象或字典) – 2011-03-31 23:28:59
@Nick:我做了一個快速測試,似乎可以同時使用對象和字典。 – 2011-04-01 15:39:20