Erstellen Sie dynamische URLs in Flask mit url_for ()

180

Die Hälfte meiner Flask-Routen erfordert eine Variable, /<variable>/addoder /<variable>/remove. Wie erstelle ich Links zu diesen Orten?

url_for() Nimmt ein Argument, zu dem die Funktion weitergeleitet werden soll, aber ich kann keine Argumente hinzufügen?

Gio Borje
quelle

Antworten:

277

Es werden Schlüsselwortargumente für die Variablen benötigt:

url_for('add', variable=foo)
FogleBird
quelle
12
was bedeutet, dass die Funktion ist def add(variable)?
Endolith
5
@endolith, ja. ** kwargs, die an übergeben url_forwerden, werden als Funktionsparameter für Routen mit variablen Regeln in Flask
highvolt
3
Das Problem ist jedoch, dass 'foo' den Rahmen sprengt, wenn es sich um eine Variable aus Python handelt. Wie lösen Sie es dann?
1
Nur damit es klarer wird, wenn Sie @app.route("/<a>/<b>")und def function(a,b): ...als seine Funktion haben, sollten Sie url_forseine Schlüsselwortargumente wie url_for('function', a='somevalue', b='anothervalue')
folgt
115

url_forIn Flask wird zum Erstellen einer URL verwendet, um den Aufwand zu vermeiden, URLs in einer Anwendung (einschließlich in Vorlagen) ändern zu müssen. Ohne url_for, wenn sich die Stamm-URL Ihrer App ändert, müssen Sie sie auf jeder Seite ändern, auf der der Link vorhanden ist.

Syntax: url_for('name of the function of the route','parameters (if required)')

Es kann verwendet werden als:

@app.route('/index')
@app.route('/')
def index():
    return 'you are in the index page'

Wenn Sie nun einen Link zur Indexseite haben, können Sie diesen verwenden:

<a href={{ url_for('index') }}>Index</a>

Sie können viel damit anfangen, zum Beispiel:

@app.route('/questions/<int:question_id>'):    #int has been used as a filter that only integer will be passed in the url otherwise it will give a 404 error
def find_question(question_id):  
    return ('you asked for question{0}'.format(question_id))

Für die oben genannten können wir verwenden:

<a href = {{ url_for('find_question' ,question_id=1) }}>Question 1</a>

So können Sie einfach die Parameter übergeben!

Hiro
quelle
1
Ich habe eine Frage, im ersten Beispiel wurde die Indexmethode als Zeichenfolge übergeben, während in der zweiten Methode die find_question als Variable übergeben wird. Warum?
आनंद
1
@ AnandTyagi Ist das was du meinst? URL-Routing
Tony Chou
3
@ आनंद wenn Variable Sie tun: {{ url_for('find_question' ,question_id=question.id) }}und nicht{{ url_for('find_question' ,question_id={{question.id}}) }}
Abdur-Rahmaan Janhangeer
38

Weitere Informationen finden Sie im Flask API-Dokumentflask.url_for()

Weitere Beispiele für die Verwendung zum Verknüpfen von js oder css mit Ihrer Vorlage finden Sie unten.

<script src="{{ url_for('static', filename='jquery.min.js') }}"></script>

<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">
Thirumalaa Srinivas
quelle
1

Vorlagen:

Übergeben Sie den Funktionsnamen und das Argument.

<a href="{{ url_for('get_blog_post',id = blog.id)}}">{{blog.title}}</a>

Ansicht, Funktion

@app.route('/blog/post/<string:id>',methods=['GET'])
def get_blog_post(id):
    return id
Muhammad Faizan Fareed
quelle