Buat URL dinamis dalam Flask dengan url_for ()

183

Setengah dari rute Flask saya memerlukan variabel say, /<variable>/addatau /<variable>/remove. Bagaimana cara membuat tautan ke lokasi itu?

url_for() membutuhkan satu argumen untuk fungsi untuk dirutekan, tetapi saya tidak dapat menambahkan argumen?

Gio Borje
sumber

Jawaban:

282

Dibutuhkan argumen kata kunci untuk variabel:

url_for('add', variable=foo)
FogleBird
sumber
12
artinya fungsinya def add(variable)?
endolith
5
@endolith, Ya. ** kwarg yang dilewati url_forakan dilewati sebagai parameter fungsi untuk rute aturan variabel di Flask
highvolt
3
Tetapi masalahnya adalah bagaimana 'foo' berada di luar ruang lingkup jika itu adalah variabel dari Python. Lalu, bagaimana Anda mengatasinya?
1
@app.route("/<a>/<b>")def function(a,b): ...url_forurl_for('function', a='somevalue', b='anothervalue')
Agar
120

url_fordi Flask digunakan untuk membuat URL untuk mencegah overhead karena harus mengubah URL di seluruh aplikasi (termasuk dalam templat). Tanpa url_for, jika ada perubahan dalam URL root aplikasi Anda, maka Anda harus mengubahnya di setiap halaman tempat tautan itu ada.

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

Dapat digunakan sebagai:

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

Sekarang jika Anda memiliki tautan, halaman indeks: Anda dapat menggunakan ini:

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

Anda dapat melakukan banyak hal dengan itu, misalnya:

@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))

Untuk hal di atas kita dapat menggunakan:

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

Seperti ini, Anda cukup melewatkan parameter!

Hiro
sumber
1
Saya punya pertanyaan, dalam contoh pertama, metode indeks diteruskan sebagai string sedangkan dalam metode kedua, find_question dilewatkan sebagai variabel. Mengapa?
आनंद
1
@AnandTyagi Inikah maksudmu? Perutean URL
Tony Chou
3
@ आनंद jika variabel Anda lakukan: {{ url_for('find_question' ,question_id=question.id) }}dan tidak{{ url_for('find_question' ,question_id={{question.id}}) }}
Abdur-Rahmaan Janhangeer
38

Lihat dokumen Flask API untukflask.url_for()

Cuplikan contoh penggunaan lainnya untuk menautkan js atau css ke templat Anda ada di bawah ini.

<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
sumber
1

Templat:

Lewati nama fungsi dan argumen.

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

Lihat, fungsi

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