urls template examples bootstrap django python-2.7 django-templates django-views

template - para el bucle en la plantilla django-el objeto de la lista no tiene el atributo ''obtener''



django urls (2)

Intenta usar solo x, porque x es un objeto, no un índice.

{% for x in total %} <tr> <td>{{ x }}</td> </tr> {% endfor %}

Espero ser útil.

Parece que debe ser muy simple, pero no he podido encontrar una respuesta que aborde este problema específico. Esencialmente, quiero que mi plantilla de Django recorra una lista que hice en la vista de esa página. Sin embargo, cuando trato de ejecutarlo obtengo "Attribute Error: ''list'' object no tiene atributo ''get''". He intentado expandir un poco la aplicación de encuestas Django y la idea de esta aplicación es tener libros ordenados por autor para votar. Entonces, esta vista mostrará una tabla con los nombres del autor por un lado y el número total de votos de cada uno de los libros del autor combinados.
Aquí están los modelos.

class Author(models.Model): author_name = models.CharField(max_length=200) def __unicode__(self): return self.author_name class Book(models.Model): author = models.ForeignKey(Author) title = models.CharField(max_length=200) votes = models.IntegerField(default=0) def __unicode__(self): return self.title

Aquí está la vista donde traté de agrupar los votos por autor y agregarlos a una lista.

def totals(request): a = Author.objects.order_by(''author_name'') b = Book.objects.order_by(''author__author_name'') total = [] for i in range(len(b)): if i < len(b)-1: x = b[i].votes if b[i].author == b[i+1].author: x += b[i+1].votes else: total.append(x) else: x = b[i].votes total.append(x) return total return render(request, "book/totals.html", {"a":a, "total":total})

Y aquí está la plantilla. el primero para el bucle en "a" funciona bien, es el segundo que se supone que recorre los "totales" que no funciona.

<h1>Total Votes</h1> <table style="border-collapse:collapse;"> <thead> <tr> <th colspan="2"><strong>Totals</strong></th> </tr> <tr style="border-bottom:1px solid black;"> <th style="padding:5px;"><em>Authors</em></th> <th style="padding:5px;border-left:1px solid black;"><em>Votes</em></th> </tr> </thead> {% for author in a %} <tr> <td>{{ author }}</td> </tr> {% endfor %} {% for x in total %} <tr> <td>{{ total[x] }}</td> </tr> {% endfor %} </thead>

Ok, creo que eso es todo. Gracias a todos los que leyeron hasta aquí. Obviamente soy bastante nuevo en esto, así que si hay algún otro comentario o comentario que alguien tenga, ciertamente estaría agradecido de escucharlos. ¡Gracias!

Editar: Aquí está el rastreo -

Environment: Request Method: GET Request URL: http://127.0.0.1:8000/book/totals/ Django Version: 1.8.3 Python Version: 2.7.10 Installed Applications: (''django.contrib.admin'', ''django.contrib.auth'', ''django.contrib.contenttypes'', ''django.contrib.sessions'', ''django.contrib.messages'', ''django.contrib.staticfiles'', ''book'') Installed Middleware: (''django.contrib.sessions.middleware.SessionMiddleware'', ''django.middleware.common.CommonMiddleware'', ''django.middleware.csrf.CsrfViewMiddleware'', ''django.contrib.auth.middleware.AuthenticationMiddleware'', ''django.contrib.auth.middleware.SessionAuthenticationMiddleware'', ''django.contrib.messages.middleware.MessageMiddleware'', ''django.middleware.clickjacking.XFrameOptionsMiddleware'', ''django.middleware.security.SecurityMiddleware'') Traceback: File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 223. response = middleware_method(request, response) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/middleware/clickjacking.py" in process_response 31. if response.get(''X-Frame-Options'', None) is not None: Exception Type: AttributeError at /book/totals/ Exception Value: ''list'' object has no attribute ''get''


Tu vista debería devolver una respuesta HTTP. Sin embargo, su vista devuelve total , que es una list .

return total

Debe eliminar esta línea o cambiarla para que devuelva una respuesta HTTP.