Imagina que estás construyendo una red social o una tienda en línea. ¿Tendrías que crear una función en Python y un archivo HTML para cada uno de tus 10,000 usuarios? Por supuesto que no.
Aquí es donde entran las Rutas Dinámicas. Es una de las características más potentes de Flask, ya que te permite definir una “plantilla de URL” que captura datos automáticamente y los pasa a tu lógica de Python. En este post, vamos a aprender a manejar variables en la URL como un profesional.
1. ¿Qué es una ruta dinámica?
Una ruta dinámica es aquella que contiene una parte variable. En Flask, indicamos esta parte encerrándola entre signos de menor y mayor: <nombre_variable>.
@app.route('/usuario/<nombre>')
def mostrar_usuario(nombre):
return f"Hola, {nombre}. ¡Bienvenido a tu perfil!"
Si el usuario entra a /usuario/miguel, la variable nombre valdrá “miguel”. Si entra a /usuario/ana, valdrá “ana”. Una sola función maneja infinitas posibilidades.
2. Conversores de tipo (Type Converters)
Por defecto, todo lo que capturas en la URL es un string. Pero, ¿qué pasa si necesitas un número entero para buscar en una base de datos? Flask te permite forzar el tipo de dato directamente en la ruta.
Los conversores más comunes son:
int: para números enteros.float: para números decimales.path: como string, pero acepta barras diagonales/.
@app.route('/post/<int:post_id>')
def ver_post(post_id):
# post_id ahora es un número real, no un texto
return f"Leyendo el artículo número {post_id}"
Tip: Usar conversores de tipo es una excelente práctica de seguridad. Si alguien intenta entrar a
/post/hola, Flask devolverá automáticamente un error 404 porque “hola” no es un entero, ahorrándote validaciones manuales.
3. Ejemplo práctico: Perfil dinámico con Jinja2
Vamos a unir lo que aprendimos en el post anterior con las rutas dinámicas.
# app.py
@app.route('/perfil/<username>')
def perfil(username):
# Aquí podrías buscar los datos de 'username' en una DB
info_usuario = {
'nombre': username.title(),
'rol': 'Desarrollador Backend',
'posts': 15
}
return render_template('perfil.html', usuario=info_usuario)
En tu HTML, puedes usar esa variable que capturaste de la URL:
<!-- templates/perfil.html -->
<h1>Perfil de {{ usuario.nombre }}</h1>
<p>Rol: {{ usuario.rol }}</p>
<p>Artículos publicados: {{ usuario.posts }}</p>
4. Rutas con múltiples variables
No estás limitado a una sola variable. Puedes construir rutas tan complejas como necesites:
@app.route('/tienda/<categoria>/<int:producto_id>')
def ver_producto(categoria, producto_id):
return f"Buscando el producto {producto_id} en la sección de {categoria}"
Conclusión: Tu checklist de rutas dinámicas
Antes de dar por terminada tu aplicación, verifica:
- ¿Usaste
< >para rodear tus variables en la ruta? - ¿El nombre de la variable en
@app.routecoincide exactamente con el argumento de tu función? - ¿Estás usando
int:para IDs o números? (Esto mejora el SEO y la seguridad). - ¿Tus rutas son descriptivas y fáciles de leer para el usuario?
¿Ves el poder de esto? Has pasado de crear páginas estáticas a construir sistemas que pueden escalar a miles de registros con apenas unas líneas de código.
Siguiente paso recomendado: Jinja2 en Flask: Las 5 etiquetas mágicas que debes conocer
Comentarios