Jinja模板变量格式化异常:现金值输出不符合预期
解决Jinja模板中现金值显示为字典列表的问题
问题根源
你的db.execute执行查询后返回的是结果列表——哪怕只匹配到一条用户记录,结果也是包含单个字典的列表,所以直接渲染{{cash}}就会输出[{'cash': 50000}]这种格式。
解决方案
方法1:在Python代码中提前提取数值
修改Python里的cash赋值逻辑,直接取出列表第一个元素的cash键对应值:
user_id = session["user_id"] stocks = db.execute("SELECT * FROM current_holdings") # 取查询结果的第一条记录,提取cash值 cash = db.execute("SELECT cash FROM users WHERE id = ?", user_id)[0]['cash'] return render_template("portfolio.html", stocks=stocks, cash=cash)
这样传入模板的cash就是纯数值50000,直接用{{cash}}就能正常显示。
方法2:在Jinja模板中直接处理列表
如果不想修改Python代码,在模板里通过索引或过滤器取出对应值:
<tr> <td colspan="4"></td> <td colspan="4"></td> <td colspan="4"></td> <td id="cash">Cash</td> <!-- 方式1:通过索引取值 --> <td>{{cash[0]['cash']}}</td> <!-- 方式2:用Jinja的first过滤器 --> <!-- <td>{{cash.first().cash}}</td> --> </tr>
补充说明
你提到同一文件中for循环能正常输出,是因为for循环会自动遍历列表里的每个字典元素;而cash这里是单条记录的列表,所以需要明确指定取第一个元素的对应字段值。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

