Flask中render_template传参后无法通过属性名访问变量如何解决
问题核心原因
你调用db.execute执行查询时,返回的结果是包含字典的列表,哪怕查询结果只有1条数据,也会被包裹在长度为1的数组里。你输出{{ data }}看到的[{'company': 'hej', ...}]开头的中括号就是列表的标识,列表本身没有password、type这类属性,所以直接写{{ data.password }}拿不到任何值。
解决方案
1. 调整后端代码
因为你是按u_id和company唯一匹配查询,返回结果最多1条,直接取列表的第一个元素即可:
else: data = db.execute("SELECT * FROM pswds WHERE u_id = ? AND company = ?", session["user_id"], request.form.get("comp_select")) # 新增这行,取列表中的第一条数据 data = data[0] return render_template("details.html", data=data)
如果要兼容查询无结果的情况,可以加个判断:data = data[0] if data else {},避免索引报错。
2. 调整模板取值
后端改完后,模板里直接按属性取值即可,修改后的表格部分代码如下:
<tbody> <tr> <td headers="entry">Company:</td> <td headers="detail">{{ data.company }}</td> </tr> <tr> <td headers="entry">Website:</td> <td headers="detail">{{ data.website }}</td> </tr> <tr> <td headers="entry">Type:</td> <td headers="detail">{{ data.type }}</td> </tr><tr> <td headers="entry">Password:</td> <td headers="detail">{{ data.password }}</td> </tr> </tbody>
内容的提问来源于stack exchange,提问作者JoakimOlofsson
相关产品推荐
相关产品推荐

