Как включить шаблон с относительным путем в 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)