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())
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())