Créer une URL dynamique à l'aide de url_for dans Flask

Salman Mehmood 15 février 2024
Créer une URL dynamique à l'aide de url_for dans Flask

Nous allons apprendre, avec cette explication, ce que fait la fonction url_for() et comment on peut créer une URL dynamique dans Flask. Nous apprendrons également à utiliser url_for() dans le modèle.

Créer une URL dynamique à l’aide de la fonction url_for() dans Flask

url_for() est une fonction dans Flask qui renvoie l’URL utilisée pour une fonction de vue particulière. Et avec cette URL, vous pouvez soit rediriger l’utilisateur vers cette page, soit afficher uniquement cette URL.

Pour démontrer, nous allons vous montrer comment nous procédons. Commençons donc à importer Flask avec url_for et redirect.

from flask import Flask, url_for, redirect

Ce sont les deux fonctions que nous allons utiliser dans cet exemple, puis nous aurons une route sur la vue BASE_FUNC().

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

Maintenant nous allons créer une autre route, que nous appellerons FIRST_FUNC, et nous renverrons url_for('BASE_FUNC'), qui est le nom d’une autre fonction. La fonction url_for() prend le nom de la fonction et renvoie la route de cette fonction que nous avons passée à l’intérieur de la fonction url_for().

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

Si nous essayons d’accéder à cette route, /first, nous obtiendrons l’URL associée à la fonction BASE_FUNC(), c’est-à-dire que nous obtiendrons sa route. Sauvegardons cela et lançons le serveur.

Si nous tapons ce point de terminaison, /first, nous n’obtiendrons qu’un slash :

URL de Flask_pour la sortie 1

Créons une autre route et appelons-la /second avec le nom de fonction SECOND_FUNC(), puis nous renverrons url_for('THIRD_FUNC', user_name='Harry'). Dans un Flask, la route fonctionne même avec des paramètres, nous devrons donc créer une autre route avec un paramètre qui serait une chaîne.

Nous allons créer une route comme celle-ci /third/<string:user_name>, et nous assurer que vous utilisez un paramètre avec le même nom à l’intérieur de la route que vous avez passé à la fonction url_for(). Nous allons maintenant créer une nouvelle fonction appelée THIRD_FUNC() et lui passer un paramètre du même nom.

Nous allons retourner le paramètre user_name et accéder à cette fonction à partir de la route de l’autre fonction à l’aide de la fonction 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 on tape /second, cela nous donnera la route de la fonction THIRD_FUNC() :

URL de Flask_pour la sortie 2

Nous pouvons utiliser des URL ou des liens pour rediriger l’utilisateur vers une page spécifique dans l’application Flask, et maintenant au lieu de renvoyer uniquement l’URL, nous pouvons rediriger l’utilisateur vers une URL particulière. Nous devrons appeler la fonction redirect(), qui prend l’URL où nous voulons rediriger l’utilisateur.

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

Maintenant, lorsque nous appelons /second, il obtiendra l’URL de la route /third/<string:user_name> et nous enverra à cette troisième route.

URL de Flask_pour la sortie 3

Nous allons maintenant vous montrer comment utiliser url_for() dans les modèles en utilisant le modèle Jinja ; nous allons importer render_template() et l’utiliser pour afficher un fichier HTML appelé index.html. Nous utiliserons une autre route qui renverra une chaîne.

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


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

Nous allons créer un fichier index.html dans le dossier des modèles, puis ajouter un lien vers la route /page. Nous passerons le Page_FUNC à l’intérieur du url_for() au lieu de passer un lien.

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

Enregistrons et actualisons la page :

URL de Flask_pour la sortie 4

Maintenant, nous allons le rendre un peu plus compliqué ; nous allons ajouter un élément dynamique qui peut être passé avec /page qui serait le paramètre. Nous utiliserons ce paramètre à l’intérieur du modèle afin que le deuxième argument de mot-clé puisse être n’importe quel argument à transmettre à cette fonction de routage.

Dans notre cas, user_name serait égal à Josh:

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

Production:

URL de Flask_pour la sortie 5

Code source Python complet :

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)

Code source HTML complet :

<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