2011-12-14 152 views
10

我試圖在模板中包含另一個在同一文件夾中的模板。要做到這一點,我只是在做{% import 'header.jinja2' %}。問題是我不斷收到TemplateNotFound錯誤。如何在Jinja2中包含具有相對路徑的模板

我的模板文件夾的樣子

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

所以,當我使阿拜的「b​​ase.jinja2」我想包括「阿比/ header.jinja2」當我渲染BICO的「base.jinja2」我會喜歡加入'bico/header.jinja2'。問題是我不想在{%include'arby/base.jinja2'%}中寫'arby /'或'bico /'前綴。這可能嗎?

由於

+0

從什麼文件,你運行`import`?來自'arby/base.jinja2'的 – Blender 2011-12-14 22:39:38

+0

。我想使用{%import'header.jinja2'%}來包含'arby/header.jinja2' – 2011-12-14 22:46:54

回答

7

有一個在jinja2.Environment.join_path()文檔字符串的提示有關繼承環境和重寫join_path()方法,以支持相對於當前(即,父參數的join_path)模板import路徑。

這裏有這樣一類的例子:

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) 
相關問題