Ver índice de contenidos del libro

3.1. Tu primera Vista: Contenido dinámico

Lo primero que haremos es crear una página web que muestre la fecha y la hora actual. Este es un buen ejemplo de una página dinámica, porque el contenido de la misma no es estático — al contrario, los contenidos cambian de acuerdo con el resultado de un cálculo (en este caso, el cálculo de la hora actual). Este simple ejemplo no involucra una base de datos cualquier tipo de entrada del usuario, sólo muestra la salida del reloj interno del servidor.

Para crear esta página, crearemos una función de vista. Una función de vista, o vista en pocas palabras, es una simple función de Python que toma como argumento una petición Web y retorna una respuesta Web.

Esta respuesta puede ser el contenido HTML de la página web, una redirección, o un error 404, o un documento XML, o una imagen... o en realidad, cualquier cosa. La vista en sí contiene toda la lógica necesaria para retornar esa respuesta. El código puede encontrarse donde quieras, mientras que se encuentre dentro de tu Python path.

No hay otro requerimiento — no hay "magia", por así decirlo. Por poner el código en algún lugar, creemos un archivo llamado views.py en el directorio mysite, el cual creamos en el capítulo anterior.

Esta es la vista que retorna la fecha y hora actual, como un documento HTML:

from django.http import HttpResponse
import datetime
 
def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

Repasemos el código anterior línea a línea:

  • Primero, importamos la clase HttpResponse, la cual pertenece al módulo django.http. Para ver más detalles de los objetos HttpRequest y HttpResponse puedes consultar el Apéndice H.
  • Luego importamos el módulo datetime de la librería estándar de Python, el conjunto de módulos útiles que vienen con Python. El módulo datetime contiene varias funciones y clases para trabajar con fechas y horas, incluyendo una función que retorna la hora actual.
  • A continuación, definimos la función llamada current_datetime. Esta es una función de vista. Cada función de vista toma como primer argumento un objeto HttpRequest, al que típicamente se le asigna el nombre request. Nota que el nombre de la función de vista no importa; no tiene que ser nombrada de una determinada manera para que Django la reconozca. La llamamos current_datetime aquí, porque el nombre indica claramente lo que hace, pero se podría llamar super_duper_awesome_current_time, o algo más repugnante. A Django no le interesa. La siguiente sección explica cómo Django encuentra esta funcion.
  • La primera línea de código dentro de la función calcula la fecha/hora actual, como un objeto datetime.datetime, y almacena el resultado en la variable local now.
  • La segunda línea de código dentro de la función construye la respuesta HTML usando el formato de cadena de caracteres de Python. El %s dentro de la cadena de caracteres es un marcador de posición, y el signo porcentaje después de la cadena de caracteres, significa "Reemplaza el %s por el valor de la variable now.". (Sí, el HTML es inválido, pero estamos tratando de mantener el ejemplo simple y corto)
  • Por último, la vista retorna un objeto HttpResponse que contiene la respuesta generada. Cada función de vista es responsable de retornar un objeto HttpResponse. (Hay excepciones, pero lo haremos más adelante)