En esta lección aprenderemos qué son los motores de plantillas y cómo trabajar con ellos.
¿Por qué son necesarios los motores de plantillas?
Comencemos con este ejemplo de código:
@app.route('/')
def root():
return 'Main Page'
En este ejemplo, en respuesta a la solicitud de la página principal, el manejador devolverá la cadena 'Main Page'. Aunque este ejemplo es útil para demostrar cómo funciona, por lo general, el navegador espera recibir una página HTML. Además, esa página puede ser bastante grande, llegando a decenas o incluso cientos de kilobytes. Ahora, vamos a intentar crear un HTML así:
@app.route('/')
def root():
title = 'My super site'
return f'<html><body><h1>{title}</h1></body></html>'
Este código se transformará rápidamente en algo ilegible. Para trabajar con HTML en los frameworks, usan bibliotecas especiales, que se llaman motores de plantillas ⚙️📄 El principio de su trabajo es el siguiente:
- En un archivo separado, se describe previamente la plantilla.
- Durante la operación del programa, la plantilla se carga y se convierte en HTML.
La plantilla puede contener tanto etiquetas HTML regulares como marcado especial. Esto te permite insertar valores en HTML, mostrar y ocultar fragmentos individuales bajo una condición, multiplicar fragmentos en un ciclo, y cosas por el estilo. Aquí hay un ejemplo de una plantilla para el motor de plantillas popular, Jinja:
{% extends "email-html_base.tmpl" %}
{% block content %}
<p>
{{ msg }}
</p>
<p>
<b>AFFECTED INSTANCES:</b>
</p>
<table class='noborder'>
<tr>
<th>UUID</th><th>IP Address</th><th>Host</th>
</tr>
{% for instance in instances -%}
<tr>
<td>{{ instance.id }}</td>
<td>{{ instance.access_ip_v4 }}</td>
<td>{{ instance.name }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
Al leer dicha plantilla, la biblioteca reemplaza las variables y ejecuta el código de lógica cada vez. Esto te permite usar la misma plantilla para emitir diferentes páginas, que solo difieren en parte del contenido (la mayoría de las veces, las variables insertadas). Vale la pena señalar que muchos motores de plantillas se pueden usar para generar textos arbitrarios, no solo HTML.
Seguridad
Rara vez se habla de esto durante el entrenamiento, pero la seguridad es extremadamente importante al trabajar con formularios HTML y plantillas en general. Si no entiendes los fundamentos de la protección, puedes cometer un error que resultará en consecuencias fatales para el proyecto. Por ejemplo, la omisión de un filtrado adecuado en los datos proporcionados por el usuario podría permitir a un atacante ejecutar un ataque XSS.
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.