Foros Python

Versión completa: Error en la lista
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas noches Foro
Tengo el siguiente error en hacer una lista con django..... luego de una larga investigación para conectarme con SQL Serverexpress2016. Paso la vista :

Código:
from django.http import HttpResponse
from django.shortcuts import render
import pyodbc 

def index(request):
    server = "DESKTOP-LIC371LSQLEXPRESS2021"
    database = "Stock_Web"
    username = "fpostai"
    password = "123456"
    cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
    cursor = cnxn.cursor()
    cursor.execute("select localidad from Localidad")
    cursor=cursor.fetchall()
    ctx={"localidad":cursor}
 
    return render(request, "appstock/index.html",ctx)

Luego la plantilla

Código:
<html>
  <table style="border: 1px;">
      <thead>
        <tr>
            <th>Localidad</th>
        </tr>
      </thead>

    <p>
          (%  for localidad in cursor  %)
          <tr>
            <li>{{localidad}}</li>
          </tr>                     
           
          (% endfor %)
        </p>
  </table>
</html>

y el resultado es el siguiente:

(% for localidad in cursor %)

[*][('CAPITAL FEDERAL', ), ('CORDOBA', ), ('LA PLATA', ), ('MAR DEL PLATA', ), ('MORENO', ), ('BAHIA BLANCA', ), ('GONZALEZ CATAN', ), ('MAGDALENA', ), ('CORONEL BRANDSEN', ), ('GLEW', ), ('ALEJANDRO KORN', ), ('CAÑUELAS', ), ('LOBOS', ), ('JUAN MARIA GUTIERREZ', ), ('CHASCOMUS', ), ('LEZAMA', ), ('GENERAL BELGRANO', ), ('LAS FLORES (PROV. BUENOS AIRES)', ), ('DOLORES (PROV. BUENOS AIRES)', ), ('SANTA TERESITA', ), ('SAN CLEMENTE DEL TUYU', ), ('PINAMAR', ), ('VILLA GESELL', ), ('MAR DE AJO', ), ('LOBERIA', ), ('NECOCHEA', ), ('LA DULCE', ), ('CORONEL VIDAL', ), ('BALCARCE', ), ('GENERAL MADARIAGA', ), ('MAIPU (PROV. BUENOS AIRES)', ), ('MONTE', ), ('NAVARRO', ), ('CARMEN DE ARECO', ), ('CARLOS SPEGAZZINI', ), ('AZUL', ), ('TAPALQUE', ), ('OLAVARRIA', ), ('LAPRIDA', ), ('GENERAL LAMADRID', ), ('MIRAMAR (PROV. BUENOS AIRES)', ), ('BENITO JUAREZ', ), ('TANDIL', ), ('AYACUCHO', ), ('RAUCH', ), ('BOLIVAR', ), ('DAIREAUX', ), ('9 DE JULIO (PROV. BUENOS AIRES)', ), ('JOSE C. PAZ', ), ('PILAR (PROV. BUENOS AIRES)', ), ('LUJAN (PROV. BUENOS AIRES)', ), ('MERCEDES (PROV. BUENOS AIRES)', ), ('SAN ANDRES DE GILES', ), ('SAN ANTONIO DE ARECO', ), ('AMERICA', ), ('BRAGADO', ), ('NORBERTO DE LA RIESTRA', ), ('SALADILLO (PROV. BUENOS AIRES)', ), ('25 DE MAYO (PROV. BUENOS AIRES)', ), ('CHIVILCOY', ), ('CHACABUCO', ), ('GENERAL ARENALES', ), ('VEDIA', ), ('LINCOLN', ), ('GENERAL PINTO', ), ('CARLOS TEJEDOR', ), ('LOS TOLDOS (PROV. BUENOS AIRES)', ), ('JUNIN (PROV. BUENOS AIRES)', ), ('TRENQUE LAUQUEN', ), ('SALAZAR', ), ('TRES LOMAS', ), ('CARLOS CASARES', ), ('PEHUAJO', ), ('COLON (PROV. BUENOS AIRES)', ), ('SALTO', ), ('ROJAS', ),.............

Saludos cordiales
Fabián Postai
Hola, Fabián.

Varias cosas. Primero, recordá que las claves de tu contexto (ctx) indican los nombres con los cuales querés acceder a algún objeto de la vista desde la plantilla. Vos estás definiendo la clave "localidad", pero después en la vista accedés como "cursor", lo cual va a generar un error. Segundo, la sintaxis en las plantillas para ejecutar código de Python (en realidad es código del sistema de plantillas de Django) es con llaves, no con paréntesis: {% %} en lugar de (% %).

Te propongo que reformules las últimas líneas de tu vista así:

Código:
localidades = cursor.fetchall()
ctx = {"localidades": localidades}
return render(request, "appstock/index.html", ctx)

Y la plantilla:

Código:
{%  for localidad in localidades %}
    <tr>
        <li>{{ localidad }}</li>
    </tr>                    
{% endfor %}

Saludos