Todas las rutas para una aplicación se almacenan en lo app.url_mapque es una instancia de werkzeug.routing.Map. Puede iterar sobre las Ruleinstancias utilizando el iter_rulesmé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í?DeleteEventtenga un parámetro requerido - puede usar ese caso especial o filtrar cualquier regla dondelen(rule.arguments) > len(rule.defaults)url_forno 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.rulees 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
Mapinstancia o acceder a ninguna de las propiedades de los mensajes de correo electrónicoRuleque 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_routesPara más información sobre la gestión de manage.py: http://flask-script.readthedocs.org/en/latest/
fuente
urllib.unquoteaurllib.parse.unquoteyprint lineaprint(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 urlspara mí (0.12.1) Lo viflask --helppero 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_mapusarlasapp.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_mapfuente
dentro de su aplicación de matraz:
fuente