Показать все записи в Django

У меня есть база данных SQL Server и у меня есть таблица, я создал хранимую процедуру для получения всех записей из таблицы и протестировал ее. Хранимая процедура работает правильно. Однако, когда я вызвал ее в моей Django программе и попытался записать все записи на html страницу, но она показывает только последнюю запись. Вот loginsdata.html

{% block content %}

    {% for row in rows %}
        <p> <h3>Name: {{row.name}}</h3>
            <h3>Email: {{row.email}}</h3>
            <h3>Username: {{row.userName}}</h3>
            <h3>Password: {{row.password}}</h3>
        </p>
        </br>
    {% endfor %}
{% endblock content %}

А вот views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.db import connection
import pyodbc

def readLogin(request):
     command = 'EXEC GetLogin \'\'' 
     cursor = connection.cursor()
     cursor.execute(command)

     strHtml = ''
     while True:
          row = cursor.fetchone()
          if not row:
               break
          
          userName = row[0]
          password = row[1]
          name = row[2]
          email = row[3]

          
          rows = []
          rows.append({'userName': userName, 'password': password, 'name': name, 'email': email})
     
     cursor.close()
     return render(request, 'login/loginsdata.html', {'rows': rows}) 

Вы каждый раз сбрасываете свой rows. Вы должны установить его перед циклом while, так:

strHtml = ''
rows = []
while True:
    row = cursor.fetchone()

    if not row:
        break
      
    userName = row[0]
    password = row[1]
    name = row[2]
    email = row[3]

      
    # no rows = []
    rows.append({'userName': userName, 'password': password, 'name': name, 'email': email})

Выводит последнюю запись только потому, что вы объявляете список в цикле, попробуйте так:

# rest of your code

rows = []

while True:
      # rest of your code
      rows.append({'userName': userName, 'password': password, 'name': name, 'email': email})
Вернуться на верх