相关疑难解决方法(0)

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)

也没有效果.

python inheritance include extend jinja2

10
推荐指数
1
解决办法
1万
查看次数

从Jinja2的父块获取内容

我需要通过控制台脚本从Jinja2中的特定块获取内容。例如

//global template
{% block target %}
    <some_content_from_top>
{% endblock %}

//parent template
{% extends 'top.html' %}
{% block target %}
    <some_content_from_parent>
{% endblock %}

//child template
{% extends 'parent.html' %}
{% block target %}
    <some_content>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

我可以使用类似的方法从特定模板的此块中获取内容,而无需继承

template_source = self.env.loader.get_source(self.env, template_path)[0]
parsed_content = self.env.parse(template_source).body
# do something with blck content
Run Code Online (Sandbox Code Playgroud)

但是我如何从所有父模板中获取内容。当然,我可以从Extends块中获取父模板的名称,并一遍又一遍地进行相同的操作,直到获得没有Extends块的顶级模板。但是也许有更有效的方法?

python jinja2 flask

3
推荐指数
1
解决办法
1586
查看次数

标签 统计

jinja2 ×2

python ×2

extend ×1

flask ×1

include ×1

inheritance ×1