Flask渲染SQLite3数据时仅生成空P标签问题求助
问题解决:Flask渲染SQLite数据为空标签的原因及修复
问题根源
SQLite默认的cursor.fetchall()返回的是元组列表,每个行数据是形如(id值, feedback内容)的元组,而非字典。你在模板中用post['feedback']或post.feedback尝试通过键名访问,自然取不到值,所以生成空标签;直接输出post能看到整行元组内容,也验证了这一点。
两种修复方案
方案1:直接通过索引访问元组元素
因为你的表结构是id在前、feedback在后,每个元组的第2个元素(索引为1,Python从0开始计数)就是反馈内容,修改前端模板代码即可:
{% for post in posts %} <div class='post'> <p>{{ post[1] }}</p> </div> {% endfor %}
方案2:让查询返回字典格式的数据
修改你的listFeedback函数,让SQLite返回支持键名访问的Row对象,这样就能保留模板中post['feedback']的写法:
def listFeedback(): con = sql.connect("databaseFiles/database.db") # 设置行工厂为Row对象,支持键名访问 con.row_factory = sql.Row cur = con.cursor() data = cur.execute('SELECT * FROM feedback').fetchall() con.close() # 可选:转成普通字典列表(如果需要) # data = [dict(row) for row in data] return data
修改后模板中的{{ post['feedback'] }}或{{ post.feedback }}就能正常显示内容了。
内容的提问来源于stack exchange,提问作者Ben Jones
相关产品推荐
相关产品推荐

