SimonZen
SimonZen

Reputation: 159

how to inherit only one block in jinja2?

I have a file base.json where:

{
    param1: value1,
{%- block block1 %}
    param2: {
        param3: value3,
        param4: value4
    }
{%- endblock %}
}

and a file result.json:

{% extends "base.json" %}
someinfo
{% block block1 %}{% endblock %}

But after rendering result.json, I get the whole information from base.json without someinfo@ from result.json template.

What is the correct way to inherit only one block from the base?

Upvotes: 1

Views: 391

Answers (1)

β.εηοιτ.βε
β.εηοιτ.βε

Reputation: 39109

Extending your template is not what you are looking to do, extends allows the reuse of a full template, with the rewrite of specific blocks:

Given: base.json

{
    param1: value1,
{%- block block1 %}
    param2: {
        param3: value3,
        param4: value4
    }
{%- endblock %}
}

And result.json

{% extends "base.json" %}
{%- block block1 %}
    param5: {
        param6: value6,
        param7: value7
    }
{%- endblock %}

Those will render as:

{
    param1: value1,
    param5: {
        param6: value6,
        param7: value7
    }
}

In your case what you can do is to use an include.

With partial.json

    param5: {
        param6: value6,
        param7: value7
    }

And result.json

{
    param8: value8,
{% include "partial.json" %}
}

Those will render as:

{
    param8: value8,
    param5: {
        param6: value6,
        param7: value7
    }
}

And because the file is a partial, that you just inculde some place else, you can also include it in a block, if you want to rewrite it somewhere:

base.json

{
    param1: value1,
{%- block block1 %}
{% include "partial.json" %}
{%- endblock %}
}

Upvotes: 1

Related Questions