Нужна помощь в итерационном просмотре каждой строки в 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)

это должно работать

Вернуться на верх