Skip to content Skip to sidebar Skip to footer

Use Blocks From Included Files For Parent In Jinja2

I'm not sure if what I want to do is possible: I'm trying to get a block in a parent template to be filled out by a file included in a child template of the parent. The best way to

Solution 1:

You can use macros in the included file, but instead of including it, you import the macros with context.


T1.html

<root><blockt3_container>
    {% block t3 %}{% endblock %}
  </block t3_container>

  <blockt2_container>
  {% block t2 %}{% endblock %}
  </block t2_container>
</root>

T2.html

{% extends 'T1.html' %}
{%- from 'T3.html' import inner, inner2 with context %}

{% block t3 %}
    {{ inner2() }}   
{% endblock %}

{% block t2 %}
    <blockt2>
        {{ inner() }}
    </block t2>
{% endblock %}

T3.html

{% macro inner2() %}
    <blockt3>
        CONTENT '{{ foo+1 }}'
    </block t3>
{% endmacro %}

{% macro inner() %}
  hello
{% endmacro %}

test.py

from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader("."))
t = env.get_template("T2.html")

print(t.render({"foo": 122}))

Post a Comment for "Use Blocks From Included Files For Parent In Jinja2"