Herencia de Plantillas
Cuando se construye un sitio web, normalmente se suele hacer una plantilla base, que tendrÔ la estructura bÔsica de la plantilla, es decir, recogerÔ todo lo que quieres que tengan en común todas tus plantillas. A la plantilla base se le suele llamar base.html. Esto es muy útil, ya que nos va a ahorrar mucho tiempo y escritura de código.
Por ejemplo, en nuestro sitio web todas las pĆ”ginas tendrĆ”n la misma cabecera, barra de navegación y pie de pĆ”gina que serĆ” comĆŗn a todas, solo variarĆ” el contenido de la parte principal. Si no existiera la herencia tendrĆamos que escribir el código html de los elementos comunes en cada una de las pĆ”ginas, pero con esto, lo que haremos serĆ” escribir el código de ellos en una plantilla base o padre y usaremos ese código en todas las pĆ”ginas hijas que hagamos.
Plantillas Incrustadas.
Antes de afrontar el tema de la herencia de plantillas vamos a parar un momento para ver un tema relacionado, como es el de incrustar código html que este en otro archivo:
{% include "nombre_archivo_html" %}
donde "nombre_archivo_html" contendrÔ el código a insertar.
¿Por quĆ© hacer esto?
La respuesta es que si tenemos elementos individuales, como puede ser la barra de navegación, cuyo código esta en un archivo a parte del principal, si algĆŗn dĆa tenemos que modificarlos (por ejemplo aƱadir mĆ”s pĆ”ginas a la barra de navegación) es mĆ”s fĆ”cil de hacer en un código breve que tenemos controlado, que no buscar dentro de un archivo, que en nuestra caso no porque nuestra plantilla base es muuuuy sencilla, pero que en una pĆ”gina profesional podrĆa tener miles de lineas de código.
Sigamos trabajando y de paso repasamos algunos conceptos ya vistos.
Lo primero creamos nuestro directorio de trabajo, el archivo de Flask que tendrÔ la aplicación y los directorios para las plantillas html (templates) y contenido estÔtico (static)
El archivo inicio.py, tendrÔ una única vista, que es la primera que veremos nada mas ejecutar la aplicación. En ella se rendizarÔ la plantilla base.html.
El código de base.html, que como ya hemos dicho tiene que estar en la carpeta "templates", quedarĆa:
Como ves, en la lĆnea 15, insertamos el código de la barra de navegación con:
{% include "nav.html" %}
El código html de la barra de navegación, que tambiĆ©n estĆ” guardado dentro de la carpeta "templates" con el nombre de "nav.html" serĆa:
Si hubiĆ©ramos creado otra carpeta dentro de "templates" y lo hubiĆ©ramos guardado allĆ, habrĆa que especificar su ruta relativa dentro de las comillas.
Bien, si ejecutamos la aplicación de Flask con:
$python3 inicio.py
El resultado serĆa el que esperĆ”bamos, es decir:
Herencia de Plantillas.
La plantilla base.html va a ser nuestra plantilla padre. La vamos a utilizar para construir tres plantillas hijas, que heredarÔn los elementos comunes de su padre (header, barra de navegación y footer), y que se corresponderÔn con cada una de las pÔginas de nuestro sitio web. (Inicio, Pagina Uno, Sobre Nosotros). Sin embargo, ten en cuenta que si una plantilla hija tiene algún elemento que también este definido en la plantilla padre, los elementos de esta última prevalecerÔn sobre las de la plantilla padre.
Por ejemplo, en la plantilla padre has definido un determinado footer y en la hija otro distinto, el footer de la plantilla hija prevalece sobre la de la padre. No habrĆ” herencia.
Empecemos modificando la plantilla base.html que ya tenemos para indicar las partes o bloques que las otras plantillas pueden escribir. Si tuviĆ©ramos hoja de estilos tendrĆamos que definirlas aquĆ. En este fichero incluiremos los bloques:
{% block title %} {% endblock %}
{% block content %} {% endblock %}
para definir el titulo y el contenido de las pƔginas hijas.
Lo que hacemos es crear una plantilla cuyo código html haremos que se repita en las demÔs, pero dejaremos los bloques que hemos comentado anteriormente para que cada una de las pÔginas hijas escriba ahà su propio código. Puedes usar tantos bloques como necesites, no tienes que limitarte a estos dos.
base.html
Inicio.py
En el archivo de vistas hemos creado las vistas para cada una de las pƔginas.
Como ya hemos definido las diferentes vistas, tenemos que modificar el archivo nav.html que contiene el menĆŗ de navegación, que hemos incluido en el código al principio del capĆtulo. Tiene que recoger la dirección de cada una de las pĆ”ginas, lo que haremos utilizando el mĆ©todo url_for.
nav.html
Y AHORA VIENE LA GRACIA DEL ASUNTO....
Si te fijas la plantilla padre, base.html, tiene 20 lĆneas de código y sin contar las de la barra de navegación que estĆ”n aparte en el archivo nav.html. Pues bien, si no usĆ”ramos herencia, tendrĆamos que copiar todo esto en cada una de las pĆ”ginas que diseƱemos junto con las modificaciones necesarias para que mostrarĆ”n lo que queremos que aparezcan en cada una de ellas. Sin embargo usando la herencia:
inicio.html
Esta primera plantilla hija la comenzamos diciendo que use la plantilla padre con la instrucción:
{% extends "base.html" %}
Para continuar reescribiendo los dos bloques, con lo que estamos diciendo al programa que busque estos bloques en la plantilla padre y que los sustituya por los que hemos puesto en esta plantilla.
El primero {% block title %} {% endblock %} modifica el tĆtulo de la vista de inicio.
El segundo {% block content %} {% endblock %} mostrarƔ el contenido propio de la pƔgina de inicio.
pagina_uno.html
Exactamente como antes. Heredamos el código de la plantilla "base.html"
{% extends "base.html" %}
y definimos los bloques se se insertarĆ”n y que se mostrarĆ”n en el diseƱo de la PĆ”gina Uno (tĆtulo y contenido)
sobre_nosotros.html
Lo mismo que en los casos anteriores.
Ejecuta el programa y comprueba como funcionan cada una de las vistas.
Vista o pƔgina
Vista para
Vista para
Baste decir que todos los archivos html estƔn el directorio "templates"
No hay comentarios:
Publicar un comentario