Django使用SQLite查询scrapeddata表逐行渲染到HTML模板问题求助
问题根因
你的代码存在两个核心错误:
- 分三次单独查询单个字段,每次
fetchall()返回的是对应字段的全量结果列表(比如companyname是包含所有行公司名的列表),你把三个全量列表都塞到同一个字典里,导致每个字段对应的是所有行的内容,渲染时自然挤在一起。 - 你只往
people_data里append了1次字典,所以people_data整个列表只有1个元素,前端循环只能渲染出1个div。
修正方案
直接一次查询整行数据,逐行组装成字典存入people_data即可,修改后的代码如下:
修正后的views.py代码
def dashboard(request): connection = sqlite3.connect('db.sqlite3') cursor = connection.cursor() # 一次查询所有需要的字段,返回的每条结果对应数据库一行数据 sql = '''SELECT companyname, name, portfolio FROM scrapeddata ORDER BY companyname ASC''' cursor.execute(sql) all_rows = cursor.fetchall() people_data = [] # 逐行处理组装数据 for row in all_rows: data = { 'companyname': row[0], 'name': row[1], 'portfolio': row[2] } people_data.append(data) connection.close() if request.user.is_authenticated: return render(request, 'dashboard.html', {'people_data':people_data}) else : return redirect('/login')
前端模板代码无需调整
你原来写的循环逻辑可以直接复用,现在people_data里每个元素对应数据库的一行,循环时每个迭代都会生成一个独立的div,刚好符合需求。
内容的提问来源于stack exchange,提问作者sumiaj
相关产品推荐
相关产品推荐

