Jinja2

2011-12-14 16 views
10

में सापेक्ष पथ के साथ टेम्पलेट को कैसे शामिल करें मैं एक टेम्पलेट में, एक ही फ़ोल्डर में एक और शामिल करने की कोशिश कर रहा हूं। ऐसा करने के लिए, मैं बस {% import 'header.jinja2' %} कर रहा हूँ। समस्या यह है कि मैं TemplateNotFound त्रुटि प्राप्त करता रहता हूं।Jinja2

मेरे टेम्पलेट फ़ोल्डर

+ myProject 
| 
+--+ templates 
    | 
    +--+ arby 
    | |-- header.jinja2 
    | |-- footer.jinja2 
    | +-- base.jinja2 
    | 
    +--+ bico 
     |-- header.jinja2 
     |-- footer.jinja2 
     +-- base.jinja2 

तरह लग रहा है तो जब मैं Arby की 'base.jinja2' मैं 'Arby/header.jinja2' शामिल करना चाहते हैं और प्रस्तुत करना है जब मैं Bico की 'base.jinja2' प्रस्तुत करना मैं करूंगा 'bico/header.jinja2' शामिल करना पसंद है। बात यह है कि मैं {% शामिल 'arby/base.jinja2'%} में 'arby /' या 'bico /' उपसर्ग लिखना नहीं चाहता हूं। क्या यह संभव है?

धन्यवाद

+0

क्या फ़ाइल से आप 'import' चल रहे हैं:

यहां इस तरह के एक वर्ग का एक उदाहरण है? 'Arby/base.jinja2' से – Blender

+0

। मैं 'arby/header.jinja2' –

उत्तर

7

वहाँ पर्यावरण उपवर्गीकरण और join_path() विधि अधिभावी import रास्तों वर्तमान (अर्थात, join_path की माता पिता तर्क) टेम्पलेट के सापेक्ष का समर्थन करने के बारे में jinja2.Environment.join_path() docstring में एक संकेत है।

class RelEnvironment(jinja2.Environment): 
    """Override join_path() to enable relative template paths.""" 
    def join_path(self, template, parent): 
     return os.path.join(os.path.dirname(parent), template) 
+0

को शामिल करने के लिए {% import 'header.jinja2'%} का उपयोग करना चाहता हूं सावधान - यह जिन्जा के कारण विंडोज़ पर काम नहीं करता है 411 और 412 - os.path.dirname और os। path.join '' \\ ''का उपयोग करेगा, जो फाइलसिस्टम लोडर अस्वीकार कर देगा। सुनिश्चित करें कि परिणाम 'os.path.sep' के बजाय ''/'' से अलग है। –