Todas las rutas para una aplicación se almacenan en lo app.url_map
que es una instancia de werkzeug.routing.Map
. Puede iterar sobre las Rule
instancias utilizando el iter_rules
método:
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
Consulte Mostrar enlaces a nuevas páginas web creadas para obtener un poco más de información.
url = url_for(rule.endpoint)
. Acabo de recibir este errorBuildError: ('DeleteEvent', {}, None)
. En cambio, para obtener la url que acabo de hacerurl = rule.rule
. ¿Alguna idea de por qué tu método no funciona para mí?DeleteEvent
tenga un parámetro requerido - puede usar ese caso especial o filtrar cualquier regla dondelen(rule.arguments) > len(rule.defaults)
url_for
no se puede generar la URL para ese método sin un parámetro, ¿verdad? OK, pero parece que mi método funciona de todos modos, solo mantiene esa porción si la URL es un parámetro. ¡Gracias!url_for(rule.endpoint)
usorule.rule
es mucho mejor porque resuelve casos en los que tiene más de una ruta para el mismo método.Acabo de encontrar la misma pregunta. Las soluciones anteriores son demasiado complejas. Simplemente abra un nuevo shell debajo de su proyecto:
La primera ' aplicación ' es mi script de proyecto: app.py , otra es el nombre de mi web.
(esta solución es para web pequeña con una pequeña ruta)
fuente
Map
instancia o acceder a ninguna de las propiedades de los mensajes de correo electrónicoRule
que contiene, sin los cuales no puede hacer nada útil.Hago un método auxiliar en mi
manage.py
:Resuelve el argumento que falta al construir un conjunto ficticio de opciones. El resultado se ve así:
Luego para ejecutarlo:
python manage.py list_routes
Para más información sobre la gestión de manage.py: http://flask-script.readthedocs.org/en/latest/
fuente
urllib.unquote
aurllib.parse.unquote
yprint line
aprint(line)
y funciona en 3.x pitón también.Similar a la respuesta de Jonathan, opté por hacer esto en su lugar. No veo el punto de usar url_for ya que se romperá si sus argumentos no son una cadena, por ejemplo, flotante
fuente
Aparentemente, desde la versión 0.11, Flask tiene una CLI incorporada . Uno de los comandos integrados enumera las rutas:
fuente
flask urls
para mí (0.12.1) Lo viflask --help
pero no veo rutas o URL en la página de CLIComo no especificó que debe ejecutarse en la línea de comandos, lo siguiente podría devolverse fácilmente en json para un tablero u otra interfaz que no sea de línea de comandos. El resultado y el resultado realmente no deberían mezclarse desde una perspectiva de diseño de todos modos. Es un mal diseño del programa, incluso si es un programa pequeño. El resultado a continuación podría usarse en una aplicación web, línea de comandos o cualquier otra cosa que ingiera json.
Tampoco especificó que necesitaba conocer la función de Python asociada con cada ruta, por lo que esto responde con mayor precisión a su pregunta original.
Yo uso a continuación para agregar la salida a un panel de monitoreo yo mismo. Si desea los métodos de ruta disponibles (GET, POST, PUT, etc.), deberá combinarlo con otras respuestas anteriores.
La regla repr () se encarga de convertir los argumentos necesarios en la ruta.
Lo mismo usando una lista de comprensión:
Salida de muestra:
fuente
Si necesita acceder a las funciones de vista, entonces, en lugar de
app.url_map
usarlasapp.view_functions
.Script de ejemplo:
Salida de ejecutar el script anterior:
(Tenga en cuenta la inclusión de la ruta "estática", que Flask crea automáticamente).
fuente
Puede ver todas las rutas a través del matraz ejecutando los siguientes comandos después de exportar o configurar la variable de entorno FLASK_APP.
flask shell app.url_map
fuente
dentro de su aplicación de matraz:
fuente