2012-03-09 62 views
4

我目前在多個不同的子目錄中有模板,我想加載jinja2中的所有模板。看起來,只是指向樹頂部的FileSystemLoader目錄不會在子文件夾中找到任何東西。jinja2文件系統加載器加載所有子目錄

有沒有辦法讓jinja2加載所有的子目錄(只有一個級別可以,但整個樹會更好)?

到目前爲止,我管理着一個選擇加載器來做到這一點:

sub_dirs = [os.path.join(template_file_root,dirname) for dirname in os.listdir(template_file_root) 
\ if os.path.isdir(os.path.join(template_file_root, dirname))] 

jinja_dirs = [ jinja2.FileSystemLoader(dirname) for dirname in sub_dirs ] 

template_env = jinja2.Environment (loader = jinja2.ChoiceLoader(jinja_dirs)) 

然而,這似乎有點哈克。有更好的建議嗎?

回答

17

Jinja會考慮子文件夾,但必須使用相對於根文件夾的路徑來引用模板。

如果我們有MYDIR /富/一個bar.html,這個工程:

template_env = jinja2.Environment(loader=jinja2.FileSystemLoader('mydir')) 
template_env.get_template('foo/bar.html') 
+0

我有同樣的問題OP可能一直在試圖解決當模板具有'import'(或可能'extends' )相對於它自己。 – OJFord 2016-07-11 14:53:11

相關問題