es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mostrar todos los registros en Django.

Tengo una base de datos de SQL Server y tengo una tabla. He creado un procedimiento almacenado para recuperar todos los registros de la tabla y lo he probado. El procedimiento almacenado funciona correctamente. Sin embargo, cuando lo llamé en mi programa Django e intenté escribir todos los registros en una página HTML, solo muestra el último registro.
Aquí está el archivo 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>

        <br>
    {% endfor %}
{% endblock content %}

Y aquí está el archivo 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}) 
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que la lista ‘rows’ se está definiendo dentro del bucle ‘while’. Por lo tanto, en cada iteración del bucle, se crea una nueva lista ‘rows’ con solo un elemento. Por lo tanto, solo se muestra el último registro en la página HTML.

    Para solucionar el problema, la lista ‘rows’ debe ser definida antes del bucle ‘while’ y la instrucción ‘rows.append’ debe colocarse dentro del bucle, de esta manera:

    def readLogin(request):
        command = 'EXEC GetLogin \'\'' 
        cursor = connection.cursor()
        cursor.execute(command)
    
        rows = [] # mueve esto fuera del bucle
        while True:
            row = cursor.fetchone()
            if not row:
                break
    
            userName = row[0]
            password = row[1]
            name = row[2]
            email = row[3]
    
            rows.append({'userName': userName, 'password': password, 'name': name, 'email': email}) # añade dentro del bucle
    
        cursor.close()
        return render(request, 'login/loginsdata.html', {'rows': rows})
    

Comments are closed.