如何在 jinja2 中只继承一个块?

how to inherit only one block in jinja2?

我有一个文件 base.json 其中:

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

和一个文件result.json:

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

但是在渲染 result.json 之后,我从 base.json 中获得了全部信息而没有 someinfo@ 来自 result.json 模板。

从base中只继承一个block的正确方法是什么?

扩展你的模板不是你想要的,扩展允许重用一个完整的模板,重写特定的块:

给定:base.json

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

result.json

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

那些将呈现为:

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

在您的情况下,您可以使用 include.

partial.json

    param5: {
        param6: value6,
        param7: value7
    }

result.json

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

那些将呈现为:

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

而且因为文件是部分文件,你只是在其他地方包含,你也可以将它包含在一个块中,如果你想在某个地方重写它:

base.json

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