2012-06-22 11 views
9

कहें कि मैं return render_template('index.html', users=users) का उपयोग करता हूं। क्या दृश्य के अंदर इसे स्पष्ट रूप से भेजने के बिना फ़ाइल नाम को टेम्पलेट के अंदर प्राप्त करना संभव है?Jinja2 टेम्पलेट के अंदर वर्तमान टेम्पलेट का फ़ाइल नाम कैसे प्राप्त करें?

+0

बस सोच रहा है: आप क्या करने की कोशिश कर रहे हैं? (उत्तर में रुचि रखते हैं) –

+0

मैं दूसरा @JeffTratner। आप क्या करना चाहते हैं? – Apalala

+0

मैं एक फ़ाइल नाम के आधार पर शरीर में एक वर्ग जोड़ना चाहता हूं। उदाहरण के लिए, यदि यह "उपयोगकर्ता-विवरण.html" टेम्पलेट है, तो मैं जावास्क्रिप्ट के माध्यम से इसे प्रबंधित करने के लिए एक संबंधित वर्ग <बॉडी क्लास = "उपयोगकर्ता-विवरण"> जोड़ना चाहता हूं। –

उत्तर

5

यदि आपको बस बेसनाम नाम की आवश्यकता है, तो आप {{ self }} का उपयोग कर सकते हैं जो टेम्पलेट के बेसनाम नामक एक repr स्ट्रिंग को वापस कर देगा, उदाहरण के लिए, <TemplateReference 'view.html'>। तुम्हें पता है, एक फिल्टर, उदा के साथ इस पार्स सकता {{ self | quoted }}

@app.template_filter('quoted') 
def quoted(s): 
    l = re.findall('\'([^\']*)\'', str(s)) 
    if l: 
     return l[0] 
    return None 

आप पूरा पथ की जरूरत है, उदाहरण के लिए, आप खाका उपवर्ग कर सकते हैं '/full/path/to/view.html'।

+0

यह काम नहीं करता है। जब मैं आपके समाधान का प्रयास करता हूं, तो यह त्रुटि उठाई जाती है: TemplateAssertionError: 'quoted' नामक कोई फ़िल्टर नहीं – renatov

+0

@renatov: आपके पास @ app.template_filter ('quoted') कहां है? फ़िल्टर आपके फ्लास्क ऐप के साथ ठीक से पंजीकृत है? – PartialOrder

5

हालांकि अनियंत्रित, {{ self._TemplateReference__context.name }} टेम्पलेट का नाम देगा। और कई इंटरस्टेस्टिंग विशेषताएँ हैं जिनका उपयोग आप self._TemplateReference__context के बाद कर सकते हैं।

आप, उदाहरण के लिए, यह आपके सर्वोच्च आधार टेम्पलेट के लिए जोड़ सकते हैं:

 <meta name="template" content="{{ self._TemplateReference__context.name }}"> 

तो एक पृष्ठ स्रोत पर ध्यान देकर आप जल्दी से मदद प्रासंगिक टेम्पलेट फ़ाइल पाएंगे कि। यदि आप इस तरह की जानकारी का खुलासा नहीं करना चाहते हैं, तो इसे पर्यावरण के परीक्षण के लिए सशर्त बनाएं।

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