Как включить шаблон с относительным путем в Jinja2
Я пытаюсь в шаблоне включить другой, который находится в той же папке. Для этого я просто делаю {% import 'header.jinja2' %}
. Проблема в том, что я продолжаю получать ошибку TemplateNotFound
.
Моя папка с шаблонами выглядит как
+ myProject
|
+--+ templates
|
+--+ arby
| |-- header.jinja2
| |-- footer.jinja2
| +-- base.jinja2
|
+--+ bico
|-- header.jinja2
|-- footer.jinja2
+-- base.jinja2
Итак, когда я делаю arby 'base.jinja2', я хотел бы включить 'arby/header.jinja2', и когда я делаю bico 'base.jinja2', я хотел бы включить 'bico/header.jinja2'. Дело в том, что я не хочу писать префикс 'arby/' или 'bico/' в {% include 'arby/base.jinja2'%}. Возможно ли это?
Спасибо
Ответы
Ответ 1
В jinja2.Environment.join_path() docstring содержится подсказка о подклассе среды и переопределении метода join_path() для поддержки import
пути относительно текущего (т.е. родительского аргумента шаблона join_path).
Вот пример такого класса:
class RelEnvironment(jinja2.Environment):
"""Override join_path() to enable relative template paths."""
def join_path(self, template, parent):
return os.path.join(os.path.dirname(parent), template)