अगर मैं वापसी तो की तरह एक Jinja2 टेम्पलेट: return render_response('home.htm', **context)
Jinja 2 टेम्पलेट से वर्तमान चर की सूची कैसे प्राप्त करें?
कैसे तो टेम्पलेट के भीतर से संदर्भ में चरों की सूची मिलता है?
अगर मैं वापसी तो की तरह एक Jinja2 टेम्पलेट: return render_response('home.htm', **context)
Jinja 2 टेम्पलेट से वर्तमान चर की सूची कैसे प्राप्त करें?
कैसे तो टेम्पलेट के भीतर से संदर्भ में चरों की सूची मिलता है?
तकनीकी रूप से, क्योंकि संदर्भ नामित शब्दकोश के रूप में पारित नहीं किया गया है, टेम्पलेट के अंदर से संदर्भ चर की सूची उत्पन्न करने के लिए थोड़ा काम आवश्यक है। हालांकि यह संभव है।
एक Jinja context function परिभाषित jinja2.Context वस्तु है, जो अनिवार्य रूप से वैश्विक चर का एक शब्दकोश है/कार्य
कि समारोह ग्लोबल नेम स्पेस में उपलब्ध कराएं वापस जाने के लिए; यानी एक jinja2. पर्यावरण या jinja2। टेम्पलेट ग्लोबल्स शब्दकोश
वैकल्पिक रूप से, संदर्भ से वस्तुओं को फ़िल्टर करें; उदाहरण के लिए, जिन्जा के डिफ़ॉल्ट वैश्विक सहायक कार्यों (रेंज, योजक इत्यादि) को छोड़ने के लिए callable()
का उपयोग करें। यह संदर्भ समारोह या टेम्पलेट में किया जा सकता है; जहां भी यह सबसे ज्यादा समझ में आता है।
उदाहरण:
>>> import jinja2
>>>
>>> @jinja2.contextfunction
... def get_context(c):
... return c
...
>>> tmpl = """
... {% for key, value in context().items() %}
... {% if not callable(value) %}
... {{ key }}:{{ value }}
... {% endif %}
... {% endfor %}
... """
>>>
>>> template = jinja2.Template(tmpl)
>>> template.globals['context'] = get_context
>>> template.globals['callable'] = callable
>>>
>>> context = {'a': 1, 'b': 2, 'c': 3}
>>>
>>> print(template.render(**context))
a:1
c:3
b:2
[वैकल्पिक रूप से, ('home.htm', context=context)
साथ render_response
फोन अन्य समाधान काम करने के लिए।]
बहुत धन्यवाद। मैं आपके बेहतर Jinja2 ज्ञान के लिए धनुष। – Christian
ध्यान दें कि 'कॉल करने योग्य' चेक के कारण, आपका समाधान उन कार्यों को अवहेलना करेगा जो संदर्भ के हिस्से के रूप में स्पष्ट रूप से पारित किए गए हैं। शायद अक्सर नहीं होता है, लेकिन एक फर्क पड़ सकता है। –
सच है। यह सरल समाधान निश्चित रूप से सुधार किया जा सकता है। उदाहरण के लिए, यदि '' टेम्पलेट'' वैश्विक है, तो '' get_context() '' '' 'संदर्भ 'के आधार पर एक नया शब्दकोश वापस कर सकता है लेकिन बिना किसी कुंजी के जो' template.globals'' में मौजूद है। – Garrett
यहाँ है कि कैसे एक बोतल app से काम कर @crewbum's answer पाने के लिए:
import jinja2
@jinja2.contextfunction
def get_context(c):
return c
app.jinja_env.globals['context'] = get_context
app.jinja_env.globals['callable'] = callable
आप इसे कहां रखते हैं? – johnny
ऐप प्रारंभिक (या ऐप फैक्ट्री) में। यदि आप फ्लास्क-स्क्लक्लेमी, फ्लास्क-लॉगिन इत्यादि जैसे किसी भी फ्लास्क एक्सटेंशन का उपयोग करते हैं, तो यह उसी स्थान पर हो सकता है जहां वे बनाए गए हैं। –
रीडिन के बारे में कैसे जी टेम्पलेट स्रोत? इसमें गलत क्या है? –