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:
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()
:
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.
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:
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:
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>
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