我正在使用 Django 框架和 SQLite DB。我在views.py 中使用SQL 查询,并连接该数据以在dashboard.html 模板的前端上呈现。
我在遍历数据库表“scrapeddata”中的每一行时遇到问题。当我查看仪表板时,正在呈现的数据全部集中在一个 div 中。我希望数据库中的每一行都在一个 div 中呈现。我尝试在views.py 中放置一个for 循环,但是当我这样做时,我只从dashboard.html 上呈现的数据库中获取一行。感谢任何帮助,谢谢。
views.py:
def dashboard(request):
connection = sqlite3.connect('db.sqlite3')
cursor = connection.cursor()
col1 = '''SELECT companyname FROM scrapeddata ORDER BY companyname ASC'''
cursor.execute(col1)
companyname = cursor.fetchall()
col2 = '''SELECT name FROM scrapeddata'''
cursor.execute(col2)
name = cursor.fetchall()
col3 = '''SELECT portfolio FROM scrapeddata'''
cursor.execute(col3)
portfolio = cursor.fetchall()
people_data = []
data = {
'companyname': companyname,
'name': name,
'portfolio': portfolio
}
people_data.append(data)
connection.close()
if request.user.is_authenticated:
return render(request, 'dashboard.html', {'people_data':people_data})
else :
return redirect('/login')
dashboard.html: 这是模板中的 for 循环。
{% for data in people_data %}
<div>
<p>{{ data.companyname }}</p>
<p>{{ data.name }}</p>
<p>{{ data.portfolio }}</p>
</div>
{% endfor %}
最佳答案
问题是 people_data 列表中只有一项:
people_data = []
data = {
'companyname': companyname,
'name': name,
'portfolio': portfolio
}
people_data.append(data)
您只是附加一个字典,数据字典中的每个字典都是一个项目列表。因为cursor.fetchAll()返回一个列表。
由于公司名称、名称和投资组合是从同一个表中获取的,因此它们的长度相同。所以在views.py中
people_data = []
for i in range(len(companyName)):
data = {
'companyname': companyname[i],
'name': name[i],
'portfolio': portfolio[i]
}
people_data.append(data)
这应该有效
关于python - 需要帮助迭代 SQLite DB 中的每一行以呈现为 html 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69384027/