2012-01-11 19 views
7

क्या किसी django टेम्पलेट के भीतर किसी दिए गए नंबर के एकाधिक अंक प्राप्त करने का कोई तरीका है?टेम्पलेट में django टुकड़ा संख्या

उदाहरण के लिए:

{{ some_num|get_digit:2 }} 

आप दूसरे सही सबसे अंकों दे देंगे। 1224531 के लिए यह 3

क्या अंतिम 3 अंक या पहले 5 अंक प्राप्त करने का कोई तरीका है? पायथन की टुकड़ा की तरह?

कुछ की तरह:

{{ some_num|get_digits:2,5}} 
+1

"Django टेम्पलेट टैग टुकड़ा" के लिए खोज जवाब देने के लिए आप लाया होता! – Stefano

उत्तर

20

वहाँ एक "टुकड़ा" टेम्पलेट टैग

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#slice

यह अजगर की सूची टुकड़ा करने की क्रिया के रूप में ही सिंटैक्स का उपयोग करता है।

उदाहरण:

{{ some_list|slice:":2" }} 

अजगर में इस के बराबर है:

some_list[:2] 

BTW अपने 2 उदाहरण "2:5""2,5"

एनबी नहीं होगा। पाइथन स्लाइसिंग किसी भी 'अनुक्रम' पर काम करता है। स्ट्रिंग्स और सूचियां अनुक्रम हैं। संख्याएं नहीं हैं!

+0

लेकिन क्या इसका मतलब है कि मुझे नंबर को पहले सूची में परिवर्तित करना होगा? –

+0

@ 9-बिट्स: स्लाइस टैग पायथन के टुकड़े की तरह काम करता है: एक स्ट्रिंग इज़ेबल है, इसलिए यह स्ट्रिंग पर पूरी तरह से काम करता है। यह संख्याओं पर काम नहीं करता है - लेकिन फिर से, अजगर का टुकड़ा संख्याओं पर भी काम नहीं करता है। – Stefano

+0

गतिशील मानों पर काम नहीं करता है - यानी जहां स्लाइसिंग का सूचकांक एक चर से आता है। Jinja2 टेम्पलेट्स में आप बस {{some_list [: upper_index]}} करते हैं और यह काम करता है। – Evgeny

1

{{1234567|make_list|slice:'2:5'|join:''}}

Stefano के जवाब सही रास्ते पर है। आपको अपनी संख्या को एक सूची में बदलने के लिए एक प्री-प्रोसेसिंग चरण की आवश्यकता है, और उस सूची को वापस स्ट्रिंग में विलय करने के लिए एक पोस्ट-प्रोसेसिंग चरण की आवश्यकता है।

0

स्लाइसिंग से पहले संख्या को एक स्ट्रिंग में परिवर्तित करने वाला कोई भी अतिरिक्त फ़िल्टर काम करेगा। मैं इन वेरिएंट प्रयोग किया है:

{{ some_num|slugify|slice:"2:5" }} 

और

{{ some_num|stringformat:"d"|slice:"5:10" }} 
संबंधित मुद्दे