我正在使用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()返回一个列表。
因为companyName、name和portfolio是从同一个表中获取的,所以它们的长度是相同的。在views。py
中people_data = []
for i in range(len(companyName)):
data = {
'companyname': companyname[i],
'name': name[i],
'portfolio': portfolio[i]
}
people_data.append(data)
应该可以