Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Hasta ahora, nuestras respuestas HTTP han sido solo texto, ¡pero podemos incluir cualquier elemento
HTML que queramos! Por ejemplo, podría decidir devolver un encabezado azul en lugar de solo el
texto en nuestra función index:
DJANGO TEMPLATES - PLANTILLAS
Sería muy tedioso escribir una página HTML completa dentro de views.py. También constituiría un
mal diseño, ya que queremos mantener partes separadas de nuestro proyecto en archivos separados
siempre que sea posible.
Es por eso que ahora presentaremos las plantillas (templates) de Django, que nos permitirán escribir
HTML y CSS en archivos separados y renderizar esos archivos usando Django.
La sintaxis que usaremos para renderizar una plantilla es la siguiente:
DJANGO TEMPLATES - PLANTILLAS
Ahora, necesitaremos crear esa plantilla. Para hacer esto, crearemos una carpeta llamada templates
dentro de nuestra aplicación, luego crearemos una carpeta llamada hola (o cualquiera que sea el
nombre de nuestra aplicación) dentro de ella, y luego agregaremos un archivo llamado index.html.
DJANGO TEMPLATES - PLANTILLAS
Además de escribir algunas páginas HTML estáticas, también podemos usar el lenguaje de plantillas de
Django para cambiar el contenido de nuestros archivos HTML según la URL visitada. Probémoslo
cambiando nuestra función de saludo anterior:
Observa que pasamos un tercer argumento a la función de renderización aquí, uno que se conoce
como contexto. En este contexto, podemos proporcionar información que nos gustaría tener
disponible dentro de nuestros archivos HTML. Este contexto toma la forma de un diccionario Python.
DJANGO TEMPLATES - PLANTILLAS
Ahora, podemos crear un archivo saludar.html:
Notarás que usamos una nueva sintaxis: llaves dobles. Esta sintaxis nos permite acceder a las variables
que hemos proporcionado en el argumento de contexto.
DJANGO TEMPLATES - PLANTILLAS
Ten en cuenta que el HTML que realmente se envía a tu navegador web incluye solo el encabezado
NO, lo que significa que Django está usando la plantilla HTML que escribimos para crear un nuevo
archivo HTML y luego lo envía al navegador web. Si hacemos un poco de trampa y nos aseguramos de
que nuestra condición sea siempre verdadera, vemos que se cumple el caso contrario:
DJANGO - ESTILOS
Si queremos agregar un archivo CSS, que es un archivo estático porque no cambia, primero crearemos
una carpeta llamada estática, luego crearemos una carpeta de año nuevo dentro de esa, y luego un
archivo styles.css dentro de ella. En este archivo, podemos agregar cualquier estilo que deseemos tal
como lo hicimos en la primera lección:
Ahora, para incluir este estilo en nuestro archivo HTML, agregamos la línea {load static} en la parte
superior de nuestra plantilla HTML, que le indica a Django que deseamos tener acceso a los archivos
en nuestra carpeta estática. Luego, en lugar de codificar el enlace a una hoja de estilo como hicimos
antes, usaremos alguna sintaxis específica de Django:
Ahora, crearemos nuestro archivo agregar.html, que es bastante similar a index.html, excepto que en el cuerpo
incluiremos un formulario en lugar de una lista:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Tareas</title>
</head>
<body>
<h1>Agregar Tarea:</h1>
<form action="">
<input type="text", name="tarea">
<input type="submit">
</form>
</body>
</html>
DJANGO - FORMULARIOS
Sin embargo, lo que acabamos de hacer no es necesariamente el mejor diseño, ya que acabamos de repetir la
mayor parte de ese HTML en dos archivos diferentes.
El lenguaje de plantillas de Django nos brinda una forma de eliminar este diseño deficiente: la herencia de
plantillas. Esto nos permite crear un archivo layout.html que contendrá la estructura general de nuestra página:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Tareas</title>
</head>
<body>
{% block body %}
{% endblock %}
</body>
</html>
Observe que nuevamente hemos usado {% ...%} para denotar algún tipo de lógica no HTML, y en este caso, le
estamos diciendo a Django que llene este "bloque" con texto de otro archivo.
DJANGO - FORMULARIOS
Ahora, podemos alterar nuestros otros dos archivos HTML para que se vean así:
index.html agregar.html
{% extends "tareas/layout.html" %}
{% extends "tareas/layout.html" %}
{% block body %}
{% block body %}
<h1>Tareas:</h1>
<h1>Agregar Tarea:</h1>
<ul>
<form action="">
{% for unaTarea in tareas %}
<input type="text", name="tarea">
<li>{{ tarea }}</li>
<input type="submit">
{% endfor %}
</form>
</ul>
{% endblock %}
{% endblock %}
DJANGO - FORMULARIOS
Sin embargo, en lugar de codificar enlaces, ahora podemos usar la variable de nombre que asignamos a cada ruta
en urls.py, y crear un enlace que se vea así:
<a href="{% url 'agregar' %}">Agregar una Nueva Tarea</a>
donde "agregar" es el nombre de esa ruta. Podemos hacer algo similar en nuestro agregar.html:
<a href="{% url 'index' %}">Ver Tareas</a>
Sin embargo, esto podría crear un problema, ya que tenemos algunas rutas denominadas index en nuestras
diferentes aplicaciones. Podemos resolver esto yendo a cada uno de los archivos urls.py de nuestra aplicación y
agregando una variable app_name, de modo que los archivos ahora se vean así:
from django.urls import path
from . import views
app_name = "tareas"
urlpatterns = [
path("", views.index, name="index"),
path("agregar", views.agregar, name="agregar")
]
DJANGO - FORMULARIOS
Luego podemos cambiar nuestros enlaces de simplemente index y agregar a tareas: index y tareas:
agregar
Ahora, trabajemos para asegurarnos de que el formulario realmente funcione cuando el usuario lo envía. Podemos
hacer esto agregando una acción al formulario que hemos creado en agregar.htm
Esto significa que una vez que se envíe el formulario, seremos redirigidos a la URL para agregar. Aquí hemos
especificado que usaremos un método de publicación en lugar de un método de obtención, que normalmente es
lo que usamos cada vez que un formulario podría alterar el estado de esa página web.
PROXIMA CLASE
PROGRAMACIÓN WEB
CON PYTHON Y JAVASCRIPT