Crear URL dinámica usando url_for en Flask

Salman Mehmood 18 agosto 2022
Crear URL dinámica usando url_for en Flask

Aprenderemos, con esta explicación, qué hace la función url_for() y cómo podemos crear una URL dinámica en Flask. También aprenderemos a usar url_for() dentro de la plantilla.

Cree una URL dinámica con la ayuda de la función url_for() en Flask

url_for() es una función en Flask que devuelve la URL utilizada para una función de vista particular. Y con esa URL, puede redirigir al usuario a esa página o solo mostrar esa URL.

Para demostrarlo, le mostraremos cómo lo hacemos. Entonces, comencemos a importar Flask junto con url_for y redirect.

from flask import Flask, url_for, redirect

Estas son las dos funciones que usaremos en este ejemplo, y luego tendremos una ruta en la vista BASE_FUNC().

@app.route("/")
def BASE_FUNC():
    return "Hi there,the base index page"

Ahora crearemos otra ruta, a la que llamaremos FIRST_FUNC, y nos devolverá url_for('BASE_FUNC'), que es el nombre de otra función. La función url_for() toma el nombre de la función y devuelve la ruta de esa función que pasamos dentro de la función url_for().

@app.route("/first")
def FIRST_FUNC():
    return url_for("BASE_FUNC")

Si intentamos acceder a esta ruta, /first, obtendremos la URL asociada a la función BASE_FUNC(), lo que significa que obtendremos su ruta. Guardemos esto y ejecutemos el servidor.

Si escribimos este punto final, /first, solo obtendremos una barra inclinada:

Flask url_para salida 1

Vamos a crear otra ruta y llamarla /second con el nombre de función SECOND_FUNC(), luego devolveremos url_for('THIRD_FUNC', user_name='Harry'). En un Flask, la ruta incluso funciona con parámetros, por lo que necesitaremos crear otra ruta con un parámetro que sería una cadena.

Crearemos una ruta como esta /tercero/<cadena:nombre_de_usuario>, y nos aseguraremos de que está utilizando un parámetro con el mismo nombre dentro de la ruta cuando pasó la función url_for(). Ahora crearemos una nueva función llamada THIRD_FUNC() y le pasaremos un parámetro con el mismo nombre.

Devolveremos el parámetro user_name y accederemos a esta función desde la ruta de la otra función usando la función url_for().

@app.route("/second")
def SECOND_FUNC():
    return url_for("THIRD_FUNC", user_name="Harry")


@app.route("/third/<string:user_name>")
def THIRD_FUNC(user_name):
    return "The user name is " + user_name

Si escribimos /segundo, nos dará la ruta de la función THIRD_FUNC():

Flask url_para salida 2

Podemos usar URL o enlaces para redirigir al usuario a una página específica en la aplicación Flask y ahora, en lugar de devolver solo la URL, podemos redirigir al usuario a una URL en particular. Tendremos que llamar a la función redirect(), que toma la URL a donde queremos redirigir al usuario.

redirect(url_for("THIRD_FUNC", user_name="Harry"))

Ahora, cuando llamemos a /second, obtendrá la URL para la ruta /third/<string:user_name> y nos enviará a esa tercera ruta.

Flask url_para salida 3

Ahora le mostraremos cómo usar url_for() dentro de las plantillas usando la plantilla Jinja; Importaremos render_template() y lo usaremos para renderizar un archivo HTML llamado index.html. Usaremos otra ruta que devolverá una cadena.

@app.route("/")
def BASE_FUNC():
    return render_template("index.html")


@app.route("/page")
def Page_FUNC():
    return "Hello"

Crearemos un archivo index.html dentro de la carpeta de plantillas y luego agregaremos un enlace a la ruta /page. Pasaremos el Page_FUNC dentro de url_for() en lugar de pasar un enlace.

<a href="{{url_for('Page')}}">Page</a>

Guardemos y refresquemos la página:

Flask url_para salida 4

Ahora lo haremos un poco más complicado; agregaremos un elemento dinámico que se puede pasar junto con /page que sería el parámetro. Usaremos este parámetro dentro de la plantilla para que el segundo argumento de palabra clave pueda ser cualquier argumento que necesite pasar a esa función de ruta.

En nuestro caso, user_name sería igual a Josh:

<a href="{{ url_for('Page_FUNC',user_name='Josh') }}">Page</a>

Producción:

Flask url_para salida 5

Código fuente completo de Python:

from flask import Flask, url_for, render_template

app = Flask(__name__)

# @app.route("/")
# def BASE_FUNC():
#    return "Hi there,the base index page"

# @app.route("/first")
# def FIRST_FUNC():
#    return url_for('BASE_FUNC')

# @app.route("/second")
# def SECOND_FUNC():
#    return redirect(url_for('THIRD_FUNC', user_name='Harry'))


# @app.route("/third/<string:user_name>")
# def THIRD_FUNC(user_name):
#    return "The user name is " + user_name


@app.route("/")
def BASE_FUNC():
    return render_template("index.html")


@app.route("/page/<string:user_name>")
def Page_FUNC(user_name):
    return "Hello " + user_name


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

Código fuente HTML completo:

<html>
    <head>
        <body>
            <h1>Hi User, this is Base page</h1>
            <a href="{{ url_for('Page_FUNC',user_name='Josh') }}">Page</a>
        </body>
    </head>
</html>
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn