2012-03-09 3 views
4

У меня есть шаблоны в нескольких разных подкаталогах, и я хотел бы загрузить все шаблоны в jinja2. Похоже, что просто указание каталога FileSystemLoader в верхней части дерева не подбирает ничего в подпапках.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)) 

Однако это кажется немного Hacky. Любые лучшие предложения?

ответ

17

Jinja учитывает вложенные папки, но шаблоны должны ссылаться на пути относительно корневой папки.

Если мы имеем Mydir/Foo/bar.html, это работает:

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

У меня такая же проблема, ОП, возможно, пытается решить, когда шаблон имеет 'import' (или предположительно' extends'), что относительно самого себя. – OJFord

Смежные вопросы