2012-12-24 18 views
16

Pracuję z Flask 0.9.Flask URL Route: Trasa Kilka adresów URL do tej samej funkcji

Teraz chcę trasa trzy adresy URL do tej samej funkcji:

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

<anything can be here> część nigdy nie zostaną użyte w funkcji.

muszę skopiować dwa razy tę samą funkcję, aby osiągnąć ten cel:

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

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

tam będzie lepszym rozwiązaniem?

Odpowiedz

45

Dlaczego po prostu nie używać parametru, który może być pusty, z domyślną wartością None?

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

bardzo proste, intuicyjne, efektywne rozwiązania. – tmthyjames

4

Tak - można użyć następującego konstrukt:

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

Zobacz fragment w http://flask.pocoo.org/snippets/57/

Powiązane problemy