You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask Jinja模板中将Python嵌套字典渲染为树形嵌套列表

实现方法

1. Flask 视图层传递数据

首先在你的Flask视图函数中,把嵌套字典传递到模板中:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    result = {'Physics': {'Mechanics': {'Kinematics ': {}, 'Dynamics': {}}}, 'Math': {'Algebra': {'Polynomials': {'sum of polynomials': {}}}}}
    return render_template('your_template.html', result=result)

2. Jinja 模板递归渲染

Jinja支持宏递归调用,刚好适配这种未知层级的嵌套字典结构,你可以直接在模板中定义递归宏来生成嵌套列表:

<!-- 定义递归宏 -->
{% macro render_category_tree(node, level=1) %}
    {% for name, child_node in node.items() %}
    <!-- 按层级生成对应class的ul标签 -->
    <ul class="{{ 'list' if level == 1 else 'list' ~ level }}">
        <li class="{{ 'title' if level == 1 else 'title' ~ level }}">
            <a href="/">{{ name }}</a>
        </li>
        <!-- 如果存在子节点,递归调用宏,层级+1 -->
        {% if child_node %}
            {{ render_category_tree(child_node, level + 1) }}
        {% endif %}
    </ul>
    {% endfor %}
{% endmacro %}

<!-- 调用宏渲染整个字典 -->
{{ render_category_tree(result) }}

渲染出来的HTML结构和你给出的预期结果完全一致。如果需要调整链接地址,直接修改a标签的href属性即可,比如要把分类名称作为参数传递,可以写成href="{{ url_for('your_route', category=name) }}"。


内容的提问来源于stack exchange,提问作者Владимир Кузовкин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:54:03