2012-12-24 6 views
16

Sto lavorando con Flask 0.9.Percorso URL pallone: ​​percorso di più URL per la stessa funzione

Ora voglio percorso tre gli URL per la stessa funzione:

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

La <anything can be here> parte non sarà mai utilizzato nella funzione.

devo copiare la stessa funzione due volte per raggiungere questo obiettivo:

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

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

Ci sarà una soluzione migliore?

risposta

45

Perché non utilizzare un parametro che può essere potenzialmente vuoto, con un valore predefinito di None?

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

molto semplice, intuitiva, soluzione efficace. – tmthyjames

4

Sì - di utilizzare il seguente costrutto:

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

Vedi lo snippet http://flask.pocoo.org/snippets/57/