Search code examples
pythonjinja2

If we have multiple macros in single jinja template. How to render a particular macro in it in python


Ex: name = aa.py.jinja2

{% macro Macro1() -%}
...
{%- endmacro %}

{% macro Macro2() -%}
...
{%-endmacro %}

Rendering in python

loader = PackageLoader(__name__, "")
env = Environment(loader=loader)
template = env.get_template("aa.jnja2")

aa = template.render("Macro1")

How to render particular macro..Otherwise have to create separate template for each macro


Solution

  • Macros are comparable with functions and are meant to be called. You can import aa.jinja2 first and then call its Macro1 function:

    aa = env.from_string('{% import 'aa.jinja2' as aa %}{{ aa.Macro1() }}').render()