Flask-Sqlite问题:下拉菜单无法显示数据库中的用户名列表
问题分析与修复方案
错误根源
从控制台输出的[('User_1',), ('User_2',), ('User_3',), ('User_4',)]可知,team_members中的每个元素是单元素元组,仅索引0位置存储了用户名。但你在模板中使用{{t[1]}}调用不存在的索引,导致下拉菜单无显示内容。
两种修复方式
方式一:修改前端模板
直接使用元组中唯一存在的索引0作为选项显示文本:
<div class="dropdown"> <p style="font-family:verdana"> Choose a team member:<SELECT name="team_members_usernames" style="font-family:verdana"> {% for t in team_members %} <OPTION value={{t[0]}}>{{t[0]}}</OPTION> {% endfor %} </SELECT> </p> </div>
方式二:修改后端数据格式
将查询结果转换为纯字符串列表,简化模板逻辑:
@app.route('/dashboard') def dashboard(): cur = get_db().cursor() team_members = cur.execute("SELECT username FROM user").fetchall() # 提取元组中的用户名,转为字符串列表 team_members = [member[0] for member in team_members] print(team_members) return render_template('dashboard.html', team_members=team_members)
对应的模板代码可简化为:
<div class="dropdown"> <p style="font-family:verdana"> Choose a team member:<SELECT name="team_members_usernames" style="font-family:verdana"> {% for username in team_members %} <OPTION value={{username}}>{{username}}</OPTION> {% endfor %} </SELECT> </p> </div>
额外提示
- 若后续切换为SQLAlchemy ORM,可通过
User.query.with_entities(User.username).all()查询,同样需注意提取单字段数据。 - 建议在Flask中配置
teardown_appcontext钩子,自动关闭数据库连接,避免资源泄漏:
@app.teardown_appcontext def close_connection(exception): db = getattr(g, '_database', None) if db is not None: db.close()
内容的提问来源于stack exchange,提问作者Franz Biberkopf
相关产品推荐
相关产品推荐

