Jinja2

2011-12-14 18 views
10

için göreli yollu bir şablon nasıl dahil edilir Bir şablonda, aynı klasörde başka bir tane eklemek için çalışıyorum. Bunu yapmak için sadece {% import 'header.jinja2' %} yapıyorum. Sorun şu ki, TemplateNotFound hatasını almaya devam ediyorum.Jinja2

Benim şablon klasörü ben arby en 'base.jinja2' ı 'arby/header.jinja2' dahil etmek istiyorum kılmak zaman Bico en 'base.jinja2' hale Yani isterim

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

benziyor 'bico/header.jinja2' içermek gibi. Mesele şu ki, 'arby /' veya 'bico /' önekini {% include 'arby/base.jinja2'%} dosyasına yazmak istemiyorum. Mümkün mü?

sayesinde

+0

Eğer 'import' çalışıyor: İşte

böyle bir sınıfın örneğidir? 'Arby/base.jinja2' den – Blender

+0

. 'Arby/header.jinja2' –

cevap

7

(yani, join_path arasında üst argüman) şablonu akıma bağlı olarak import yolları desteklemek için join_path() metodu Çevre sınıflara ve geçersiz kılma konusunda jinja2.Environment.join_path() docstringe bir açıklama yoktur. Ne Dosyadan

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

Dikkatli olmak için {% import 'header.jinja2'%} 'yi kullanmak istiyorum. Bu, Jinja 411 ve 412 - os.path.dirname ve os. path.join, FilesystemLoader'ın reddettiği '' \\ ''ifadesini kullanacaktır. Sonucun "os.path.sep" yerine "/" ile ayrıldığından emin olun. –