Alle Routen für eine Anwendung werden gespeichert, auf app.url_map
denen sich eine Instanz von befindet werkzeug.routing.Map
. Sie können die Rule
Instanzen mithilfe der folgenden iter_rules
Methode durchlaufen :
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
Weitere Informationen finden Sie unter Anzeigen von Links zu neuen Webseiten, die erstellt wurden .
url = url_for(rule.endpoint)
. Ich habe gerade diesen Fehler bekommenBuildError: ('DeleteEvent', {}, None)
. Stattdessen, um die URL zu bekommen, die ich gerade gemacht habeurl = rule.rule
. Irgendeine Idee, warum deine Methode bei mir nicht funktioniert?DeleteEvent
einen erforderlichen Parameter - Sie können entweder diesen Sonderfall oder alle Regeln herausfiltern, wolen(rule.arguments) > len(rule.defaults)
url_for
kann die URL für diese Methode nicht ohne Parameter generieren, oder? OK, aber es sieht so aus, als ob meine Methode trotzdem funktioniert. Sie behält nur diesen Teil bei, wenn die URL ein Parameter ist. Vielen Dank!url_for(rule.endpoint)
Verwendung ,rule.rule
die viel besser beacause Fälle lösen , wo Sie mehr als eine Route für die gleiche Methode haben.Ich habe gerade die gleiche Frage getroffen. Diese Lösung ist zu komplex. Öffnen Sie einfach eine neue Shell unter Ihrem Projekt:
Die erste ' App ' ist mein Projektskript: app.py , eine andere ist der Name meines Webs.
(Diese Lösung ist für winzige Netze mit einer kleinen Route)
quelle
Map
Instanz durchlaufen oder auf die Eigenschaften derRule
darin enthaltenen s zugegriffen werden kann, ohne die Sie eigentlich nichts Nützliches tun können.Ich mache eine Hilfsmethode für meine
manage.py
:Es löst das fehlende Argument, indem es einen Dummy-Satz von Optionen erstellt. Die Ausgabe sieht aus wie:
Dann, um es auszuführen:
python manage.py list_routes
Weitere Informationen zum Auschecken von manage.py finden Sie unter: http://flask-script.readthedocs.org/en/latest/
quelle
urllib.unquote
zuurllib.parse.unquote
undprint line
zuprint(line)
und es funktioniert auch in Python 3.x.Ähnlich wie bei Jonathans Antwort habe ich mich stattdessen dafür entschieden. Ich sehe keinen Sinn darin, url_for zu verwenden, da es kaputt geht, wenn Ihre Argumente keine Zeichenfolge sind, z. B. float
quelle
Anscheinend hat Flask seit Version 0.11 eine integrierte CLI . Einer der integrierten Befehle listet die Routen auf:
quelle
flask urls
für mich (0.12.1).flask --help
Ich habe das gesehen, aber ich sehe keine Routen oder URLs auf der CLI-SeiteDa Sie nicht angegeben haben, dass die Befehlszeile ausgeführt werden muss, kann Folgendes in json für ein Dashboard oder eine andere Nicht-Befehlszeilenschnittstelle problemlos zurückgegeben werden. Das Ergebnis und die Ausgabe sollten sowieso nicht aus gestalterischer Sicht vermischt werden. Es ist ein schlechtes Programmdesign, auch wenn es ein winziges Programm ist. Das folgende Ergebnis kann dann in einer Webanwendung, einer Befehlszeile oder in anderen Elementen verwendet werden, die json aufnehmen.
Sie haben auch nicht angegeben, dass Sie die mit jeder Route verknüpfte Python-Funktion kennen müssen, damit Ihre ursprüngliche Frage genauer beantwortet wird.
Ich verwende unten, um die Ausgabe selbst einem Überwachungs-Dashboard hinzuzufügen. Wenn Sie die verfügbaren Routenmethoden (GET, POST, PUT usw.) verwenden möchten, müssen Sie sie mit anderen Antworten oben kombinieren.
Rule's repr () sorgt dafür, dass die erforderlichen Argumente in der Route konvertiert werden.
Das Gleiche mit einem Listenverständnis:
Beispielausgabe:
quelle
Wenn Sie die Ansicht Funktionen zugreifen selbst dann statt
app.url_map
, Verwendungapp.view_functions
.Beispielskript:
Ausgabe von der Ausführung des obigen Skripts:
(Beachten Sie die Aufnahme der "statischen" Route, die von Flask automatisch erstellt wird.)
quelle
Sie können alle Routen über die Flask-Shell anzeigen, indem Sie nach dem Exportieren oder Festlegen der Umgebungsvariablen FLASK_APP die folgenden Befehle ausführen.
flask shell app.url_map
quelle
In Ihrer Kolben-App tun Sie Folgendes:
quelle