2013-07-30 5 views
7

मैं अपने टेम्पलेट में निम्न कोड है:Jinja2 दौर फिल्टर गोलाई नहीं

data: [{% for deet in deets %} {{ deet.value*100|round(1) }}{% if not loop.last %},{% endif %} {% endfor %}] 

मैं डेटा की उम्मीद कर रहा हूँ 1 दशमलव स्थान तक पूर्ण। हालांकि, जब मैं पेज या स्रोत देखता हूं, तो यह आउटपुट मुझे मिल रहा है:

data: [ 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818 ] 

यह 1 दशमलव स्थान तक नहीं है। यह टेम्पलेट त्रुटि या कुछ भी के बिना चलता है, लेकिन गलत आउटपुट पैदा करता है। मेरी समझ from the documentation, और यहां तक ​​कि a related stack overflow question, क्या मेरे प्रारूप को काम करना चाहिए। मुझे क्या याद आ रही है या गलत कर रहा है?

+0

ऐसा लगता है कि आपका कोड 'deet.value * 100' के ** उत्पाद ** के बजाय' 100' के आसपास है। आपको शायद अपने कोड में गुणा करना पसंद करना चाहिए, न कि टेम्पलेट में। – bernie

+0

गोटा, मैं तुम्हारा मुद्दा लेता हूं, लेकिन मैं 100 * deet.value पर स्विच किया। दौर (3) और यह मेरे लिए हल किया। धन्यवाद! – Mittenchops

उत्तर

7

पता नहीं था कि फ़िल्टर ऑपरेटर को गुणा पर प्राथमिकता थी!

बर्नी की टिप्पणी पर बाद, मैं

{{ deet.value*100|round(1) }} 

बंद

{{ 100*deet.value|round(1) }} 

जो समस्या हल करने के लिए। मैं सहमत हूं कि प्रसंस्करण कहीं और कोड में होना चाहिए, और यह बेहतर अभ्यास होगा।

+0

यह स्पष्ट रूप से विभाजन के लिए काम नहीं करता है। उस स्थिति में, जिन्जा परिणाम को गोल करने में असमर्थ है। मैं इस विचार के साथ समझौता नहीं कर रहा हूं कि गणित को देखने के बजाय नियंत्रक में किया जाना चाहिए। यह एक अच्छी गंध के रूप में मुखौटा एक बुरी गंध है। – sobri

18

आप माता-पिता को उस मूल्य के आस-पास रख सकते हैं जिसे आप गोल करना चाहते हैं। (यह रूप में अच्छी तरह विभाजन के लिए काम करता है, @sobri क्या लिखा है के विपरीत।)

{{ (deet.value/100)|round }} 

नोट: round एक float रिटर्न इसलिए यदि आप वास्तव में चाहते हैं int तुम भी है कि फिल्टर के माध्यम से मूल्य पारित करने के लिए की है।

{{ (deet.value/100)|round|int }} 
1

मैं इस पर भाग गया ... जिन्जा में आवश्यक int (mem_total/4)। मैंने इसे दो ऑपरेशंस बनाकर हल किया:

{% set LS_HEAP_SIZE = grains['mem_total']/4 %} 
{% set LS_HEAP_SIZE = LS_HEAP_SIZE | round | int %}