1 usuario conectado

Desarrollo web con Python. Plantillas. Jinja2

Comparte esto

Ahora vamos a explorar el concepto de plantillas en el desarrollo web con Python, centrándonos en Jinja2, que es el motor de plantillas predeterminado y muy popular utilizado por frameworks como Flask (y también se puede usar con Django, aunque Django tiene su propio sistema de plantillas).

¿Qué son las Plantillas Web?

En el desarrollo web dinámico, las plantillas son archivos de texto (generalmente con extensión .html) que contienen estructura HTML estática junto con marcadores especiales que permiten la inserción dinámica de datos. Un motor de plantillas es una biblioteca que toma una plantilla y datos de la aplicación, procesa la plantilla reemplazando los marcadores con los datos proporcionados, y genera el documento HTML final que se envía al navegador del usuario.

Beneficios de Usar Plantillas:

Jinja2: Un Motor de Plantillas Potente y Flexible

Jinja2 es un motor de plantillas moderno y ampliamente utilizado para Python. Está inspirado en el motor de plantillas Django pero es independiente y se puede usar en cualquier proyecto Python.

Características Clave de Jinja2:

Sintaxis Básica de Jinja2:

Uso con Flask:

En Flask, se configura un directorio donde se almacenan las plantillas (por defecto, una carpeta llamada templates en la misma ubicación que el archivo de la aplicación). La función render_template() de Flask se utiliza para cargar una plantilla Jinja2 y renderizarla con los datos proporcionados desde la vista.

Python
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/usuario/<nombre>')
def perfil_usuario(nombre):
    usuario = {'nombre': nombre, 'email': f'{nombre.lower()}@ejemplo.com', 'esta_logueado': True}
    productos = [
        {'nombre': 'Laptop', 'precio': 1200},
        {'nombre': 'Mouse', 'precio': 25},
        {'nombre': 'Teclado', 'precio': 75}
    ]
    return render_template('perfil.html', usuario=usuario, productos=productos)

if __name__ == '__main__':
    app.run(debug=True)

Y la plantilla templates/perfil.html podría verse así:

HTML
<!DOCTYPE html>
<html>
<head>
    <title>Perfil de Usuario</title>
</head>
<body>
    <h1>Perfil de {{ usuario.nombre }}</h1>
    <p>Correo Electrónico: {{ usuario.email }}</p>

    {% if usuario.esta_logueado %}
        <p>¡Estás logueado!</p>
        <a href="/logout">Cerrar Sesión</a>
    {% else %}
        <p>Por favor, inicia sesión.</p>
        <a href="/login">Iniciar Sesión</a>
    {% endif %}

    <h2>Productos Disponibles</h2>
    <ul>
        {% for producto in productos %}
            <li>{{ producto.nombre }} - ${{ producto.precio }}</li>
        {% else %}
            <li>No hay productos disponibles.</li>
        {% endfor %}
    </ul>
</body>
</html>

Otros Motores de Plantillas:

Aunque Jinja2 es muy popular, existen otros motores de plantillas para Python, como el sistema de plantillas integrado de Django y Mako. Sin embargo, Jinja2 destaca por su flexibilidad y rendimiento, lo que lo convierte en una excelente opción para una amplia gama de proyectos web.

En resumen, las plantillas web y motores como Jinja2 son herramientas esenciales para construir aplicaciones web dinámicas en Python, ya que facilitan la separación de la lógica de presentación, la reutilización de código y la generación dinámica de contenido de manera eficiente y segura.