2012-12-24 12 views
16

Ich arbeite mit Flask 0.9.Flask URL Route: Route Mehrere URLs mit der gleichen Funktion

Jetzt möchte ich Route drei URLs auf die gleiche Funktion:

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

Der <anything can be here> Teil wird nie in der Funktion verwendet werden.

Ich habe zweimal die gleiche Funktion zu kopieren, dieses Ziel zu erreichen:

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

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

Wird es eine bessere Lösung?

Antwort

45

Warum nicht einfach einen Parameter verwenden, der möglicherweise leer ist, mit einem Standardwert von None?

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

sehr einfache, intuitive und effektive Lösung. – tmthyjames

4

Ja - Sie verwenden das folgende Konstrukt:

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

das Snippet sehen auf http://flask.pocoo.org/snippets/57/

Verwandte Themen