jinja2 filesystemloader加载所有子目录

chr*_*sst 8 python jinja2

我目前在多个不同的子目录中有模板,我想加载jinja2中的所有模板.看起来只是将FileSystemLoader目录指向树的顶部不会拾取子文件夹中的任何内容.

有没有办法让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))
Run Code Online (Sandbox Code Playgroud)

然而,这似乎有点hacky.有更好的建议吗?

jd.*_*jd. 29

Jinja确实考虑了子文件夹,但必须使用相对于根文件夹的路径引用模板.

如果我们有mydir/foo/bar.html,这可行:

template_env = jinja2.Environment(loader=jinja2.FileSystemLoader('mydir'))
template_env.get_template('foo/bar.html')
Run Code Online (Sandbox Code Playgroud)