Как включить макросы/другие шаблоны с помощью FunctionLoader в Jinja2?

Я пытаюсь использовать изолированную среду Jinja2 для настройки шаблонов.

Я пытался использовать как DictLoader, так и FunctionLoader, но продолжаю сталкиваться с похожими проблемами... Сейчас меня больше всего беспокоит FunctionLoader.

Мне не удается include или import использовать другой шаблон (который содержит макросы). Указанная функция «загрузки» FuctionLoader никогда не вызывается для шаблонов, на которые ссылаются.

Я пробовал без везения:

  • просто ожидая, что импорт попадет в загрузчик, используя базовый синтаксис «импорт» и «включить»
  • передача загрузчика в контекст, чтобы посмотреть, может ли он потянуть таким образом
  • передача набора шаблонов в контекст, также надеясь, что это может потянуть
  • еще несколько вещей, о которых я забыл

Я уверен, что должен быть способ поддержать это - может ли кто-нибудь указать мне правильное направление?


person Jonathan Vanasco    schedule 07.03.2013    source источник


Ответы (1)


Синтаксис импорта должен использовать строки в кавычках.

Плохой:

{% import utils %}
{% import utils.macros as macros %}
{% from utils.macros import macro_1 , macro_2 %}

Хорошо:

{% import "utils" as utils %}
{% import "utils.macros" as macros %}
{% from "utils.macros" import macro_1 , macro_2 %}

Строка в кавычках передается в FunctionLoader или используется как ключ с DictLoader

person Jonathan Vanasco    schedule 12.03.2013
comment
в качестве примечания: это поведение вообще не упоминается в официальных документах. - person Jonathan Vanasco; 12.03.2013