Erstellen eine dynamische URL mit url_for in Flask

Salman Mehmood 15 Februar 2024
Erstellen eine dynamische URL mit url_for in Flask

Wir werden mit dieser Erklärung lernen, was die Funktion url_for() macht und wie wir eine dynamische URL in Flask erstellen können. Wir werden auch lernen, wie man url_for() innerhalb der Vorlage verwendet.

Erstellen eine dynamische URL mit Hilfe der Funktion url_for() in Flask

url_for() ist eine Funktion in Flask, die die für eine bestimmte Ansichtsfunktion verwendete URL zurückgibt. Und mit dieser URL könnten Sie den Benutzer entweder auf diese Seite umleiten oder nur diese URL anzeigen.

Zur Demonstration zeigen wir Ihnen, wie wir das machen. Beginnen wir also mit dem Import von Flask zusammen mit url_for und redirect.

from flask import Flask, url_for, redirect

Dies sind die beiden Funktionen, die wir in diesem Beispiel verwenden werden, und dann haben wir eine Route in der Ansicht BASE_FUNC().

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

Jetzt erstellen wir eine weitere Route, die wir FIRST_FUNC nennen, und wir geben url_for('BASE_FUNC') zurück, was der Name einer anderen Funktion ist. Die Funktion url_for() nimmt den Funktionsnamen und gibt die Route dieser Funktion zurück, die wir innerhalb der Funktion url_for() übergeben haben.

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

Wenn wir versuchen, auf diese Route /first zuzugreifen, erhalten wir die mit der Funktion BASE_FUNC() verknüpfte URL, was bedeutet, dass wir ihre Route erhalten. Lassen Sie uns dies speichern und den Server ausführen.

Wenn wir diesen Endpunkt /first eingeben, erhalten wir nur einen Schrägstrich:

Flask-URL_für Ausgabe 1

Lassen Sie uns eine weitere Route erstellen und sie /second mit dem Funktionsnamen SECOND_FUNC() nennen, dann geben wir url_for('THIRD_FUNC', user_name='Harry') zurück. In einem Flask funktioniert die Route sogar mit Parametern, also müssen wir eine andere Route mit einem Parameter erstellen, der eine Zeichenfolge wäre.

Wir erstellen eine Route wie diese /third/<string:user_name> und stellen sicher, dass Sie einen Parameter mit demselben Namen innerhalb der Route verwenden, mit dem Sie die Funktion url_for() übergeben haben. Nun erstellen wir eine neue Funktion namens THIRD_FUNC() und übergeben ihr einen gleichnamigen Parameter.

Wir geben den Parameter user_name zurück und greifen auf diese Funktion über die Route der anderen Funktion mit der Funktion url_for() zu.

@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

Wenn wir /second eingeben, erhalten wir die Route der Funktion THIRD_FUNC():

Flask url_for Output 2

Wir können URLs oder Links verwenden, um den Benutzer auf eine bestimmte Seite in der Flask-Anwendung umzuleiten, und anstatt nur die URL zurückzugeben, können wir den Benutzer jetzt auf eine bestimmte URL umleiten. Wir müssen die Funktion redirect() aufrufen, die die URL übernimmt, wohin wir den Benutzer umleiten möchten.

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

Wenn wir nun /second aufrufen, erhält es die URL für die Route /third/<string:user_name> und sendet uns an diese dritte Route.

Flask url_for Output 3

Jetzt zeigen wir Ihnen, wie Sie url_for() innerhalb der Vorlagen mit der Jinja-Vorlage verwenden; Wir importieren render_template() und verwenden es zum Rendern einer HTML-Datei namens index.html. Wir werden eine andere Route verwenden, die eine Zeichenfolge zurückgibt.

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


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

Wir erstellen eine index.html-Datei im Vorlagenordner und fügen dann einen Link zur for /page-Route hinzu. Wir werden den Page_FUNC innerhalb der url_for() übergeben, anstatt einen Link zu übergeben.

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

Lassen Sie uns die Seite speichern und aktualisieren:

Flask url_for Output 4

Jetzt machen wir es etwas komplizierter; Wir fügen ein dynamisches Element hinzu, das zusammen mit /page übergeben werden kann, das der Parameter wäre. Wir werden diesen Parameter innerhalb der Vorlage verwenden, damit das zweite Schlüsselwortargument alle Argumente sein kann, die an diese Routenfunktion übergeben werden müssen.

In unserem Fall wäre user_name gleich Josh:

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

Ausgabe:

Flask url_for Output 5

Vollständiger Python-Quellcode:

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)

Vollständiger HTML-Quellcode:

<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