Flask URL Route: 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>

La partie <anything can be here> ne sera jamais utilisée dans la fonction.

J'ai copier la même fonction deux fois 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?

25
demandé sur Gaby Solis 2012-12-24 20:27:03

2 réponses

Pourquoi ne pas simplement utiliser un paramètre potentiellement 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):
53
répondu Amber 2012-12-24 16:32:31

Oui-vous utilisez la construction suivante:

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

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

4
répondu Jon Clements 2012-12-24 16:38:33