2013-09-16 9 views
13

मैं jinja2 में एक अजगर शब्दकोश से प्रविष्टियों को पुनर्प्राप्त करने का प्रयास कर रहा हूं, लेकिन समस्या यह है कि मुझे नहीं पता कि मैं किस कुंजी को समय से पहले एक्सेस करना चाहता हूं - कुंजी को s.course नामक चर में संग्रहीत किया जाता है। तो मेरी समस्या यह है कि मुझे इस चर को दोबारा बदलने की जरूरत है। मैं for लूप का उपयोग नहीं करना चाहता क्योंकि यह आवश्यकतानुसार शब्दकोश के माध्यम से अधिक होगा। यहां एक वर्कअराउंड है जिसे मैंने बनाया है, लेकिन यह संभव है कि s.course मान बदल सकते हैं ताकि स्पष्ट रूप से हार्ड कोडिंग हो जैसे यह बुरा है। मैं यह अनिवार्य रूप से इस तरह काम करना चाहता हूँ:जब कुंजी एक चर है तो जिन्जा में शब्दकोश से मूल्य कैसे प्राप्त करें?

{% if s.course == "p11" %} 
    {{course_codes.p11}} 
{% elif s.course == "m12a" %} 
    {{course_codes.m12a}} 
{% elif s.course == "m12b" %} 
    {{course_codes.m12b}} 
{% endif %} 

लेकिन मैं इसे इस तरह दिखना चाहते हैं:

{{course_codes.{{s.course}}}} 

धन्यवाद!

+0

क्यों एक वास्तविक वस्तु प्रासंगिक पाठ्यक्रम कोड का प्रतिनिधित्व टेम्पलेट को पारित नहीं किया जा रहा है? –

उत्तर

18

आप course_codes.get(s.course) उपयोग कर सकते हैं:

>>> import jinja2 
>>> env = jinja2.Environment() 
>>> t = env.from_string('{{ codes.get(mycode) }}') 
>>> t.generate(codes={'a': '123'}, mycode='a').next() 
u'123' 
2

मैं नमक के साथ जिंजा उपयोग कर रहा हूँ, और मैं पाया है कि अच्छी तरह से काम करता है निम्नलिखित की तरह कुछ:

{% for role in pillar.packages %} 
    {% for package in pillar['packages'][role] %} 
    install_{{ package }}: 
     pkg.installed: 
     - name: {{ package }} 
    {% endfor %} 
{% endfor %} 

है, और अधिक का उपयोग करें verbose [ ] वाक्यविन्यास और जब आप एक चर का उपयोग करने की आवश्यकता है उद्धरण बाहर छोड़ दें।

5

बिल्कुल डॉट संकेतन का उपयोग करने के लिए कोई जरूरत नहीं है, तो आप कर सकते हैं:

"{{course_codes[s.course]}}" 
संबंधित मुद्दे