Как косвенно вызвать макрос в шаблоне Jinja2?

Я пытаюсь сделать что-то вроде этого:

{% macro obj_type_1 %}
stuff
{% endmacro %}
{% macro obj_type_2 %}
stuff
{% endmacro %}

{{ (obj|get_type)(obj) }}

В этом примере get_type— это фильтр, возвращающий obj_type_1или obj_type_2— т. е. имя макроса для вызова obj. Я не хочу размечать objвыводом конфигурации, потому что прямо сейчас objиспользуется в нескольких шаблонах в качестве структурных данных, которые должны отображаться с различной разметкой в ​​зависимости от контекста.

Я знаю, что синтаксис здесь немного замучен, но я думаю, это потому, что то, что я хочу сделать, не сразу возможно в шаблонах Jinja. Я пытаюсь заменить большую чертову ерунду if/elif/else в некотором коде генерации конфигурации шаблонами, но этот бит кажется камнем преткновения.

7
задан Chris R 17 May 2012 в 04:30
поделиться