Как включить шаблон с относительным путем в Jinja2 - PullRequest
12 голосов
/ 15 декабря 2011

Я пытаюсь в шаблоне включить еще один, который находится в той же папке.Для этого я просто делаю {% 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 'и когда я отображаю' base.jinja2 'в bico, я бы хотел включить' bico / header.jinja2 'Дело в том, что я не хочу писать префикс 'arby /' или 'bico /' в {% include 'arby / base.jinja2'%}.Это возможно?

Спасибо

1 Ответ

8 голосов
/ 16 декабря 2011

В jinja2.Environment.join_path () есть подсказка о создании подкласса Environment и переопределении метода 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)
...