Нужна помощь в итерационном просмотре каждой строки в SQLite DB для рендеринга в html шаблон
Я использую фреймворк Django с SQLite DB. Я использую SQL запросы в моем views.py и подключаю эти данные для визуализации на фронтенде в моем шаблоне dashboard.html.
У меня проблемы с итерацией каждой строки в таблице базы данных 'scrapeddata'. Когда я просматриваю приборную панель, отображаемые данные сгруппированы в одном div. Я надеюсь, что каждая строка в базе данных будет отображаться в одном div. Я пытался разместить цикл for в моем views.py, но когда я делаю это, я получаю только один ряд из базы данных, отображаемый на 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)
это должно работать