Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Rutas con nombre Python: Desarrollo web con Flask

Hasta ahora, cuando necesitábamos una URL en nuestra app de Flask (por ejemplo, en un botón o un formulario), simplemente la escribíamos a mano, directamente en la plantilla o en el código del backend. Mira este ejemplo:

<form action="/users/{{ user['id'] }}" method="post">
  <input type="submit" value="Remove">
</form>

Y en Python, tal vez hacías algo así al hacer un redireccionamiento:

return redirect(f'/users/{user["id"]}')

Aunque esto parece práctico al principio, puede convertirse pronto en un dolor de cabeza. 🤕


El problema de las URLs "pegadas"

Imagina que decides cambiar la URL para mostrar un usuario de /users/<id> a algo más corto, como /u/<id>. Ahora tendrías que ir a todos los archivos HTML y funciones de Python donde usaste esa ruta y actualizarla una por una. Si te olvidas de una, tu sitio mostrará un error 404, página no encontrada. 🤯

Esto además afecta tus pruebas: no van a fallar, pero algunas páginas dejarán de funcionar correctamente si tienen enlaces incorrectos.

Solución: rutas con nombre y url_for

Para estos casos, Flask (y otros frameworks) tienen una herramienta muy útil llamada url_for(). Esta función construye las URLs por ti, basándose en el nombre del manejador de la ruta, no en la ruta escrita a mano.

Vamos con un ejemplo:

from flask import Flask, url_for

app = Flask(__name__)

@app.route('/users/')
def users_index():
    # Muestra la lista de usuarios

@app.route('/users/<id>')
def users_show(id):
    # Muestra un solo usuario

@app.route('/')
def index():
    # Construye las URLs automáticamente
    users_url = url_for('users_index')      # Resultado: '/users/'
    user42_url = url_for('users_show', id=42)  # Resultado: '/users/42'
    ...

La gracia está en que, si luego decides cambiar '/users/<id>' por '/u/<id>', solo basta con cambiar el decorador @app.route() de users_show, y TODO lo que use url_for('users_show', ...) se actualizará automáticamente.


¿Dónde usar url_for?

Debes utilizar url_for() en cualquier parte donde construyas enlaces:

  • En los templates (HTML)
  • En los redireccionamientos del servidor (Python)
  • En correos electrónicos generados por la aplicación

Así aseguras que todas las URLs de tu app estén siempre actualizadas y correctas.


Cómo usar url_for en plantillas (Jinja2)

Cuando estás construyendo una lista de usuarios, como esta:

<h1>User List</h1>
<ul>
    {% for user in users %}
    <li><a href="/users/{{ user.id }}">{{ user.name }}</a></li>
    {% endfor %}
</ul>

Si algún día cambias la URL base de /users/ a /profiles/, todos esos enlaces se romperán. Mejor hacerlo con url_for:

<h1>User List</h1>
<ul>
    {% for user in users %}
    <li>
      <a href="{{ url_for('users_show', id=user.id) }}">
        {{ user.name }}
      </a>
    </li>
    {% endfor %}
</ul>

Este código se ve casi igual, pero ahora se adapta automáticamente si cambia la ruta del manejador users_show.


¿Cómo funciona url_for()?

Parámetro Qué hace Ejemplo
Nombre del manejador Identifica qué función de Flask usará url_for('users_index')/users/
Argumentos variables Se reemplazan en la URL url_for('users_show', id=1)/users/1

Resumen

  • Flask tiene url_for() para construir enlaces dinámicamente.
  • Usa el nombre del manejador de ruta como clave.
  • Funciona tanto en Python como en las plantillas HTML (Jinja2).
  • Hace que actualizar rutas sea más seguro y mucho más sencillo.

Trabajo independiente

  1. Asegúrate de que en los controladores se utilicen los nombres de las rutas para acceder a ellas.

Aplicación de referencia

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.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY