API de renderizado de plantillas de Flask

Flask usa el motor Jinja2 para renderizar plantillas, incrustando datos de Python en páginas HTML.

Los archivos de plantilla se colocan por defecto en el directorio raíz del proyectotemplates/en la carpeta.


render_template

La función de renderizado de plantillas más utilizada, carga la plantilla desde un archivo y la renderiza.

Parámetros Tipo Descripción
template_name_or_list str / list Nombre de archivo de plantilla (relativo a la carpeta templates), o lista de nombres de plantilla (devuelve el primero que exista)
**context Parámetros de palabra clave Variables pasadas a la plantilla, como title="Hello", user=user_obj

Todas las funciones de renderizado

Función Descripción
render_template(template_name_or_list, **context) Renderiza la plantilla desde un archivo y devuelve una cadena HTML
render_template_string(source, **context) Renderiza la plantilla desde una cadena, adecuada para plantillas integradas
stream_template(template_name_or_list, **context) Renderiza plantillas de forma continua, devuelve un generador. Adecuado para páginas grandes
stream_template_string(source, **context) Renderiza plantillas de cadena de forma continua
get_template_attribute(template_name, attribute) Obtiene macros o variables de la plantilla. Puede llamar a macros de Jinja2 desde Python

Objetos integrados en plantillas

Los siguientes objetos se pueden usar en plantillas sin pasarlos explícitamente:

Objeto Descripción
request Objeto de solicitud actual
session Objeto de sesión actual
g Objeto global a nivel de solicitud
config Diccionario de configuración de la aplicación
url_for Función de generación de URL
get_flashed_messages Función de recuperación de mensajes de Flask

Ejemplo de código

Ejemplo

from flask import Flask, render_template, render_template_string

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("index.html",
                          title="Página de inicio de EJEMPLO",
                          posts=[{"id": 1, "title": "Artículo A"},
                                 {"id": 2, "title": "Artículo B"}])

@app.route("/inline")
def inline_template():
    # Renderizar desde una cadena (el contenido de la plantilla se escribe directamente en el código)
    return render_template_string("""
        <h1>Hello, {{ name }}!</h1>
        <p>Welcome to EJEMPLO.</p>
    """
, name="World")

@app.route("/stream")
def stream_large_page():
    # Renderizado continuo de páginas grandes, generando y enviando sobre la marcha
    return stream_template("large_report.html",
                          items=get_10k_items())
Otras extensiones