2009-12-24 16 views

उत्तर

105

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

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

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

+0

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

+0

@ निक: मैंने एक त्वरित परीक्षण किया, और यह दोनों ऑब्जेक्ट्स और डिक्ट्स के साथ काम करना प्रतीत होता था। –

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

ठीक है, धन्यवाद। मैंने टेम्पलेट को भेजने से पहले पायथन में सॉर्टिंग समाप्त कर दी: movie_list = sorted(movie_list, key = lambda movie:movie.rating, reverse = True) बहुत बुरा, टेम्पलेट को सॉर्ट ऑर्डर पर निर्णय लेने के लिए अच्छा लगा सकता है! (क्या अन्य टेम्पलेट इंजन ऐसा कर सकते हैं?) –

+1

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

+1

@ स्टेव एस: दिलचस्प। क्या आप वास्तव में अपनी नई जानकारी के साथ ** उत्तर ** पोस्ट कर सकते हैं? कृपया संस्करण संख्या शामिल करें। –

7

देखें आप आरोही क्रम में सॉर्ट करने के लिए चाहते हैं

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

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

{% for movie in movie_list|sort(attribute='rating', reverse = True) %} 
संबंधित मुद्दे