2011-10-06 15 views
9

मुझे लगता है कि आम तौर पर मैं उत्सुक हूं कि जिन्जा 2 ब्रैकेट्स में कौन से ऑपरेशन स्वीकार्य हैं, उदाहरण के लिए जब मैं एक कोष्ठक में 'पेट' इस्तेमाल करने की कोशिशजिन्जा 2 ब्रैकेट्स में गोल करना

UndefinedError: 'round' is undefined

इसी तरह:

{{ round(255*(mileage['chevy'] - mileage['ford']))/1000 }} 

यह ट्रैस बैक पर त्रुटि फेंकता है: मुझे क्या करना कोशिश कर रहा हूँ तो जैसे एम्बेडेड डेटा पर कार्रवाई है जिंजा ब्लॉक, मुझे एक अपरिभाषित त्रुटि मिलती है - भले ही वे मानक lib फ़ंक्शन दोनों हों। डेटा पास करने से पहले टेम्पलेट-प्रतिपादन के दौरान इस ऑपरेशन को करने का कोई तरीका है?

+0

सामान्य रूप से, आप अपने प्रोग्राम कोड में गणना करना चाहते हैं, न कि आपके टेम्पलेट में। मुझे यकीन नहीं है कि आपको लगता है कि Jinja2 के ब्रैकेट क्या करते हैं, लेकिन वे जो नहीं करते हैं, वह आपको अपने टेम्पलेट्स में पायथन कोड एम्बेड करने की अनुमति देता है। – geoffspear

उत्तर

24

जिंज 2 टेम्पलेटिंग भाषा पायथन भाषा से अलग है। जिन्जा 2 में, मूल्यों पर ऑपरेशन अक्सर फिल्टर के दौरान किया जाता है: {{ something | operation }}। आप jinja2 दस्तावेज में list of filters पा सकते हैं।

उदाहरण के लिए, round के लिए, आप कर सकते हैं:

{{ 42.55|round }} 

इस वेब पेज पर "42" प्रदर्शित करेगा। एक abs फ़िल्टर उसी तरह मौजूद है।

कृपया ध्यान दें कि इन फ़िल्टरों का उपयोग केवल प्रदर्शन से पहले मूल्यों को बदलने के लिए किया जा सकता है, और गणना के लिए उपयोग किया जा सकता है। वैसे भी टेम्पलेट में गणना नहीं की जानी चाहिए।

+1

+1। बस इसमें जोड़ने के लिए, उपलब्ध वस्तुओं और कार्यों को [संदर्भ] (http://jinja.pocoo.org/docs/api/#the-context) के माध्यम से इंजेक्शन दिया जाता है जिसमें डिफ़ॉल्ट रूप से केवल कुछ विशेष आइटम होते हैं। – Cameron

+0

धन्यवाद, मैं पाइथन टेम्पलेट पुस्तकालयों का उपयोग करने में कूद गया क्योंकि यह सोच रहा था कि यह PHP या जावा सर्वर पृष्ठों की तरह था। यह मेरे प्रश्न का उत्तर देता है। – maxm

+1

"वैसे भी टेम्पलेट में गणना नहीं की जानी चाहिए।" <- यह खराब सलाह है। उदाहरण के लिए डेटा की एक तालिका लें, जहां संख्याओं को एकाधिक कॉलम में विभिन्न तरीकों से प्रदर्शित करने की आवश्यकता है। – sobri

संबंधित मुद्दे