आप Jinja2 में एक सूची को कैसे सॉर्ट करते हैं?


88

मैं यह करने की कोशिश कर रहा हूं:

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

लेकिन यह सही नहीं है ... प्रलेखन अस्पष्ट है ... आप इसे जिन्जा 2 में कैसे करते हैं?

जवाबों:


170

संस्करण 2.6 के रूप में, Jinja2 के अंतर्निहित सॉर्ट फ़िल्टर आपको एक विशेषता निर्दिष्ट करने की अनुमति देता है:

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

Http://jinja.pocoo.org/docs/templates/#sort देखें


धन्यवाद, ठीक यही मैं चाहता था। वैसे, क्या यह दोनों प्रकार की विशेषताओं के साथ काम करता है ... आप गेटअटर और गेटिटेम को जानते हैं ? (क्योंकि मुझे याद नहीं है कि "फिल्में" ऑब्जेक्ट या डिक्शनरी थीं)
निक पर्किंस

@ निक: मैंने एक त्वरित परीक्षण किया था, और यह वस्तुओं और डाइक दोनों के साथ काम करने लगा।
स्टीव एस

2
अच्छा, यह भी एक टपल सूचकांक के लिए काम करता है:list_of_tuples|sort(attribute='0')
नवीन

रिवर्स ऑर्डर में मूल्यों को प्रदर्शित करना आसान हो सकता है (उदाहरण के लिए यह रेटिंग के लिए दिलचस्प हो सकता है), इस मामले में बस विकल्प का उपयोग करें reverse=True
रोमेन

25

यदि आप आरोही क्रम में क्रमबद्ध करना चाहते हैं

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

यदि आप अवरोही क्रम में क्रमबद्ध करना चाहते हैं

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

14

आमतौर पर हम जिन्जा 2 को देने से पहले सूची को क्रमबद्ध करते हैं। जिनजा के sortफिल्टर में एक कुंजी निर्दिष्ट करने का कोई तरीका नहीं है ।

हालांकि, आप हमेशा कोशिश कर सकते हैं {% for movie in movie_list|sort %}। वह वाक्य रचना है। आपको छंटाई के लिए किसी भी प्रकार की महत्वपूर्ण जानकारी प्रदान करने की आवश्यकता नहीं है।

आप इसके लिए एक कस्टम फ़िल्टर भी आज़मा सकते हैं और लिख सकते हैं। जब आप Jinja2 को डेटा देने से पहले सॉर्ट कर सकते हैं तो मूर्खतापूर्ण लगता है।

यदि movie_listवस्तुओं की एक सूची है, तो आप विभिन्न तुलना विधियों (परिभाषित कर सकते हैं __lt__, __gt__उन वस्तुओं के वर्ग के लिए, आदि)।

यदि movie_listटुपल्स या सूचियों की सूची है, तो रेटिंग पहले होनी चाहिए। या आपको जिन्जा 2 के बाहर छँटाई करनी होगी।

यदि movie_listशब्दकोशों की एक सूची है, तो आप उपयोग कर सकते हैं dictsort, जो छँटाई के लिए एक मुख्य विनिर्देश को स्वीकार करता है। इसे पढ़ें: http://jinja.pocoo.org/2/documentation/templates#dictsort एक उदाहरण के लिए।


ठीक है धन्यवाद। मैंने टेम्प्लेट भेजने से पहले अजगर को छांटना समाप्त कर दिया: <code> movie_list = सॉर्ट किया गया (movie_list, key = lambda मूवी: movie.rating, रिवर्स = ट्रू) </ code> बहुत बुरा, टेम्पलेट को तय करने देना अच्छा हो सकता है सॉर्ट क्रम पर! (अन्य टेम्प्लेट इंजन ऐसा कर सकते थे?)
निक पर्किंस

2
जिनजा 2 के हालिया संस्करण अब एक विशेषता को निर्दिष्ट करने की अनुमति देते हैं।
स्टीव एस

1
@ सचः एस: दिलचस्प। क्या आप वास्तव में अपनी नई जानकारी के साथ उत्तर दे सकते हैं? कृपया संस्करण संख्या शामिल करें।
S.Lott

1
छोटा सुधार: स्रोत की जाँच करने के बाद मुझे पता चला कि आपकी सूची टुपल्स (उदाहरण के अनुसार वापसी dict.items()) से बनी है तो सूचकांक को निर्दिष्ट करना संभव है :sort(attribut='1')
लुकास साइमन

@SLott - टेम्पलेट में छँटाई के लिए उपयोग का मामला है: यह प्रदर्शन परत है - एक ही डेटा के कई विचारों को प्रस्तुत करने में सक्षम - ये दो अलग-अलग टीम हो सकती हैं। प्रदर्शन परत में यह काम फिर से क्यों नहीं? चिंताओं के युग्मन को तोड़ने के लिए एक अच्छी जगह की तरह लगता है।
शेन सी। मेसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.