jinja2 filesystemloader загрузить все подкаталоги - PullRequest
8 голосов
/ 10 марта 2012

В настоящее время у меня есть шаблоны в нескольких разных подкаталогах, и я хотел бы загрузить все шаблоны в jinja2.Похоже, что просто указав каталог FileSystemLoader в верхней части дерева, вы ничего не найдете в подпапках.

Есть ли способ заставить jinja2 загрузить все подкаталоги (всего один уровень)down - это нормально, но все дерево было бы предпочтительным)?

До сих пор мне удавалось сделать это с помощью загрузчика выбора:

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))

Однако это выглядит немного странно.Есть лучшие предложения?

1 Ответ

28 голосов
/ 10 марта 2012

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

Если у нас есть mydir / foo / bar.html, это работает:

template_env = jinja2.Environment(loader=jinja2.FileSystemLoader('mydir'))
template_env.get_template('foo/bar.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...