2012-03-09 20 views
4

私は現在、複数の異なるサブディレクトリにテンプレートを持っており、すべてのテンプレートをjinja2にロードしたいと思います。ツリーの一番上にあるFileSystemLoaderディレクトリを指し示すだけでは、サブフォルダ内のすべてのファイルが取得されないようです。jinja2 filesystemloaderすべてのサブディレクトリをロード

jinja2にすべてのサブディレクトリをロードさせる方法はありますか?(単一のレベルダウンだけはOKですが、ツリー全体が優先されます)

これまでのところ、私は選択肢ローダーでこれを行うことができた:

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の/ fooの/内容でbar.htmlを持っている場合は、この作品:

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

私はテンプレートが 'import'(またはおそらく' extends'を持っているときに、同じ問題のOPが解決しようとしてきたことが持っています)それ自体に相対的です。 – OJFord

関連する問題