如何在Flask的Jinja2中遍历指定字典获取id、name与abilities
如何在Flask的Jinja2模板中遍历指定字典获取id、name和abilities?
你手上有这样一个字典:
user_dict = { 2: {'name': 'e', 'abilities': [] }, 3: {'name': 'xyx', 'abilities': []}, 1: {'name': 'user', 'abilities': ['can_add', 'can_delete']} }
想要在Flask的Jinja2模板里遍历它,拿到每个条目的id(也就是字典的键)、name和abilities?这事儿其实很简单,Jinja2对字典的遍历支持相当友好,我给你一步步拆解:
核心思路
Jinja2中可以通过items()方法遍历字典的键值对,这样就能同时获取到每个条目的id(字典的键)以及对应的详细数据(字典的值)。
完整实现示例
1. Flask视图层传递变量
先在你的Flask视图函数里,把这个字典以变量的形式传给模板:
from flask import Flask, render_template app = Flask(__name__) @app.route('/users') def show_users(): user_dict = { 2: {'name': 'e', 'abilities': [] }, 3: {'name': 'xyx', 'abilities': []}, 1: {'name': 'user', 'abilities': ['can_add', 'can_delete']} } # 将字典传给模板,变量名设为user_data return render_template('users.html', user_data=user_dict)
2. Jinja2模板遍历渲染
然后在对应的users.html模板里,这样写就能拿到所有需要的字段了:
<!DOCTYPE html> <html> <head> <title>用户权限列表</title> </head> <body> <h2>用户信息详情</h2> {% for user_id, user_info in user_data.items() %} <div style="margin-bottom: 15px; padding: 10px; border: 1px solid #eee;"> <p><strong>ID:</strong> {{ user_id }}</p> <p><strong>用户名:</strong> {{ user_info.name }}</p> <p><strong>拥有权限:</strong> {% if user_info.abilities %} <!-- 把权限列表转成逗号分隔的字符串 --> {{ user_info.abilities|join(', ') }} {% else %} 无任何权限 {% endif %} </p> </div> {% endfor %} </body> </html>
额外优化:控制遍历顺序
如果需要按id从小到大的顺序遍历(比如1→2→3),可以给字典加上dictsort过滤器,模板里的遍历语句改成:
{% for user_id, user_info in user_data|dictsort %} <!-- 内部渲染逻辑和上面一致 --> {% endfor %}
内容的提问来源于stack exchange,提问作者Ghada Adel
相关产品推荐
相关产品推荐

