Jinja2:如何在包含的模板中使用命名块,在可扩展模板中

Jas*_*med 10 python inheritance include extend jinja2

我正在使用Jinja2扩展和导入问题.

base_admin.html

<html>
<body>
    <div class="outerbody">
        <somehtml code>
        {% include "base_admin_nav.html" %}
        {% include "base_admin_sidebar.html" %}            
        {% include "base_admin_content.html" %}
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

base_admin_content.html

<div class="innerbody">
    {% block body_content %}
    {% endblock %}
</div>
Run Code Online (Sandbox Code Playgroud)

admin.html

{% extends 'base_admin.html' %}
{% block body_content %}
    <div>BodyContent</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

body_content中的代码未传递给base_admin_content.html.任何解决方法?

注意

这不是包含文件中的这个jinja2:块的重复 ..包含在这里的不同文件中完成

定义{% macro admin_content() %}insdide base_admin_content.html和导入它的内部base_admin.html使用

{% from "base_admin_content.html" import admin_content with context %}
        {{ admin_content() }}.
Run Code Online (Sandbox Code Playgroud)

也没有效果.

Que*_*lan 7

已编辑 - 反映原始问题的变化

好的,既然我知道您肯定需要包含,那么我将这样做:base_admin_content.html您应该将admin.html文件直接包含到base_admin.html. 该admin.html文件将扩展base_admin_content.html,一切正常:

base_admin.html

<html>
<body>
    <div class="outerbody">
        <somehtml code>
        {% include 'admin.html' %}
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

管理.html

{% extends 'base_admin_content.html' %}
{% block body_content %}
    <div>BodyContent</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

base_admin_content.html

{% block innerbody %}
<div class="innerbody">
    {% block body_content %}
    {% endblock %}
</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

为什么这有效,但您的原始代码无效?

在您的base_admin.html文件中,您有

{% include 'base_admin_content.html' %}
Run Code Online (Sandbox Code Playgroud)

我们没有对 admin.html 的引用,这就是为什么admin.html文件中没有任何内容出现的原因!。因此,我们应该这样做:

{% include 'admin.html' %}
Run Code Online (Sandbox Code Playgroud)

因为它在扩展行中包含对base_admin_content的引用:

{% extends 'base_admin_content.html' %}
Run Code Online (Sandbox Code Playgroud)

希望这是有道理的...