Cada view es responsable de hacer una de dos cosas: devolver un objeto
HttpResponse con el contenido de la página solicitada, o levantar una excepción, por ejemplo
Http404. El resto depende de uno.
Una view puede leer registros de una base de datos, o no. Puede usar un sistema de templates como el de Django – o algún otro basado en Python –, o no. Puede generar un archivo PDF, una salida XML, crear un archivo ZIP, cualquier cosa que uno quiera, usando cualquier librería Python que uno quiera.
Todo lo que Django espera es un
HttpResponse. O una excepción.
Por ser conveniente, vamos a usar la API de Django para base de datos, que vimos en el
Tutorial 1. Aquí tenemos una aproximación a la view
index() que muestra las 5 encuestas más recientes en el sistema, separadas por comas, de acuerdo a la fecha de publicación:
from django.http import HttpResponse
from polls.models import Poll
def index(request):
latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
output = ', '.join([p.question for p in latest_poll_list])
return HttpResponse(output)
Pero tenemos un problema: el diseño de la página está escrito explícitamente en la view. Si uno quisiera cambiar cómo se ve la página, debería editar el código Python. Entonces vamos a usar el sistema de templates de Django para separar el diseño del código Python.
Primero, creamos un directorio polls en el directorio de templates especificado en setting:TEMPLATE_DIRS. Allí creamos un archivo llamado index.html. En ese template escribimos el siguiente código:
from django.http import HttpResponse
from django.template import Context, loader
from polls.models import Poll
def index(request):
latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
template = loader.get_template('polls/index.html')
context = Context({
'latest_poll_list': latest_poll_list,
})
return HttpResponse(template.render(context))
No hay comentarios:
Publicar un comentario