python - Jinja2:如何在包含的模板、可扩展模板中使用命名 block

标签 python inheritance include jinja2 extend

我在使用 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>

base_admin_content.html

<div class="innerbody">
    {% block body_content %}
    {% endblock %}
</div>

admin.html

{% extends 'base_admin.html' %}
{% block body_content %}
    <div>BodyContent</div>
{% endblock %}

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

注意

This is not duplicate of this one jinja2: blocks in included files.. The include is done in different files here

Defining {% macro admin_content() %} insdide base_admin_content.html and importing it inside base_admin.html using

{% from "base_admin_content.html" import admin_content with context %}
        {{ admin_content() }}.

also has no effect.

最佳答案

已编辑 - 以反射(reflect)原始问题的变化

好吧,既然我知道你肯定需要包含,我会这样做:而不是包含 base_admin_content.html 文件,你应该包含 admin.html 文件直接写入 base_admin.htmladmin.html 文件将扩展 base_admin_content.html 并且一切正常:

base_admin.html

<html>
<body>
    <div class="outerbody">
        <somehtml code>
        {% include 'admin.html' %}
    </div>
</body>
</html>

admin.html

{% extends 'base_admin_content.html' %}
{% block body_content %}
    <div>BodyContent</div>
{% endblock %}

base_admin_content.html

{% block innerbody %}
<div class="innerbody">
    {% block body_content %}
    {% endblock %}
</div>
{% endblock %}

为什么这行得通而您的原始代码却行不通?

在你的 base_admin.html 文件中你有

{% include 'base_admin_content.html' %}

我们没有引用 admin.html,这就是为什么 admin.html 文件没有显示的原因!。因此,我们应该这样做:

{% include 'admin.html' %}

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

{% extends 'base_admin_content.html' %}

希望这是有道理的...

关于python - Jinja2:如何在包含的模板、可扩展模板中使用命名 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21729864/

相关文章:

c++ - G++ 错误 : In file included, 然后未声明 Foo

java - 从 Gradle 中排除单个测试文件

python - Pandas - 将值转换为 1 和 0 的快速方法

python - SQLAlchemy:选择查询中对象的哪些列

Java类继承

java - 继承成本 Java (Android)

python - 无法为 Python 3 安装 Python 虚拟环境

python - 如何使 Django 与 MySQL 连接器/Python 一起工作?

python - 我是否正确使用 super() ?

C++:如何在 Netbeans 中添加库(DarkGDK + DirectX SDK)