如何在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,提问作者Владимир Кузовкин
相关产品推荐
相关产品推荐

