Semua rute untuk aplikasi disimpan di app.url_map
mana merupakan instance dari werkzeug.routing.Map
. Anda dapat mengulangi Rule
instance dengan menggunakan iter_rules
metode:
from flask import Flask, url_for
app = Flask(__name__)
def has_no_empty_params(rule):
defaults = rule.defaults if rule.defaults is not None else ()
arguments = rule.arguments if rule.arguments is not None else ()
return len(defaults) >= len(arguments)
@app.route("/site-map")
def site_map():
links = []
for rule in app.url_map.iter_rules():
# Filter out rules we can't navigate to in a browser
# and rules that require parameters
if "GET" in rule.methods and has_no_empty_params(rule):
url = url_for(rule.endpoint, **(rule.defaults or {}))
links.append((url, rule.endpoint))
# links is now a list of url, endpoint tuples
Lihat Menampilkan tautan ke halaman web baru yang dibuat untuk informasi lebih lanjut.
url = url_for(rule.endpoint)
. Saya baru saja mendapat kesalahan iniBuildError: ('DeleteEvent', {}, None)
. Sebagai gantinya, untuk mendapatkan url yang baru saja saya lakukanurl = rule.rule
. Adakah alasan mengapa metode Anda tidak berhasil untuk saya?DeleteEvent
memiliki parameter yang diperlukan - Anda dapat menggunakan huruf khusus untuk itu atau menyaring aturan apa pun di manalen(rule.arguments) > len(rule.defaults)
url_for
tidak dapat menghasilkan URL untuk methid itu tanpa parameter, kan? OK, tapi sepertinya metode saya tetap bekerja, itu hanya menjaga bagian itu jika URL sebagai parameter. Terima kasih!url_for(rule.endpoint)
penggunaanrule.rule
yang jauh lebih baik karena memecahkan kasus di mana Anda memiliki lebih dari satu rute untuk metode yang sama.Saya baru saja bertemu pertanyaan yang sama. Solusi di atas terlalu kompleks. Cukup buka shell baru di bawah proyek Anda:
' Aplikasi ' pertama adalah skrip proyek saya: app.py , yang lain adalah nama web saya.
(solusi ini untuk web kecil dengan rute kecil)
sumber
Map
contoh atau mengakses salah satu propertiRule
di dalamnya, yang tanpanya Anda tidak dapat benar-benar melakukan sesuatu yang bermanfaat.Saya membuat metode pembantu pada
manage.py
:Ini memecahkan argumen yang hilang dengan membangun serangkaian opsi boneka. Outputnya terlihat seperti:
Kemudian untuk menjalankannya:
python manage.py list_routes
Untuk lebih lanjut tentang checkout manage.py: http://flask-script.readthedocs.org/en/latest/
sumber
urllib.unquote
keurllib.parse.unquote
danprint line
keprint(line)
dan itu bekerja di python 3.x juga.Mirip dengan jawaban Jonathan saya memilih untuk melakukan ini sebagai gantinya. Saya tidak melihat gunanya menggunakan url_for karena akan rusak jika argumen Anda bukan string misalnya float
sumber
Rupanya, sejak versi 0.11, Flask memiliki CLI bawaan . Salah satu perintah bawaan mencantumkan rute:
sumber
flask urls
untuk saya (0.12.1). Melihat ituflask --help
tetapi saya tidak melihat rute atau url pada halaman CLIKarena Anda tidak menentukan bahwa itu harus dijalankan command-line, berikut ini dapat dengan mudah dikembalikan di json untuk dasbor atau antarmuka non-command-line lainnya. Bagaimanapun juga, hasil dan keluarannya seharusnya tidak disatukan dari perspektif desain. Ini desain program yang buruk, bahkan jika itu adalah program kecil. Hasil di bawah ini kemudian dapat digunakan dalam aplikasi web, command-line, atau apa pun yang menelan json.
Anda juga tidak menentukan bahwa Anda perlu mengetahui fungsi python yang terkait dengan setiap rute, jadi ini lebih tepat menjawab pertanyaan awal Anda.
Saya menggunakan di bawah ini untuk menambahkan output ke dashboard pemantauan sendiri. Jika Anda ingin metode rute yang tersedia (DAPATKAN, POST, PUT, dll.), Anda harus menggabungkannya dengan jawaban lain di atas.
Repr () aturan mengatur konversi argumen yang diperlukan dalam rute.
Hal yang sama menggunakan pemahaman daftar:
Output sampel:
sumber
Jika Anda perlu mengakses fungsi tampilan itu sendiri, maka alih-alih
app.url_map
, gunakanapp.view_functions
.Skrip contoh:
Output dari menjalankan skrip di atas:
(Perhatikan penyertaan rute "statis", yang dibuat secara otomatis oleh Flask.)
sumber
Anda dapat melihat semua Rute melalui flask shell dengan menjalankan perintah berikut setelah mengekspor atau mengatur variabel lingkungan FLASK_APP.
flask shell app.url_map
sumber
di dalam aplikasi labu Anda lakukan:
sumber