web-dev-qa-db-fra.com

Flask Route URL: Route plusieurs URL vers la même fonction

Je travaille avec Flask 0.9.

Maintenant, je veux router trois URL vers la même fonction:

/item/<int:appitemid>
/item/<int:appitemid>/ 
/item/<int:appitemid>/<anything can be here>

Le <anything can be here> part ne sera jamais utilisé dans la fonction.

Je dois copier deux fois la même fonction pour atteindre cet objectif:

@app.route('/item/<int:appitemid>/')
def show_item(appitemid):

@app.route('/item/<int:appitemid>/<path:anythingcanbehere>')
def show_item(appitemid, anythingcanbehere):

Y aura-t-il une meilleure solution?

39
Gaby Solis

Pourquoi ne pas simplement utiliser un paramètre pouvant être vide, avec une valeur par défaut de None?

@app.route('/item/<int:appitemid>/')
@app.route('/item/<int:appitemid>/<path:anythingcanbehere>')
def show_item(appitemid, anythingcanbehere=None):
85
Amber

Oui - vous utilisez la construction suivante:

@app.route('/item/<int:appitemid>/<path:path>')
@app.route('/item/<int:appitemid>', defaults={'path': ''})

Voir l'extrait sur http://flask.pocoo.org/snippets/57/

10
Jon Clements