2012-12-24 137 views
16

我正在使用Flask 0.9。燒瓶URL路由:路由幾個URL到相同的功能

現在我想航線三個URL相同的功能:

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

<anything can be here>部分永遠不會在函數中使用。

我必須複製相同功能的兩倍來實現這一目標:

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

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

會不會有更好的解決辦法?

回答

45

爲什麼不使用可能爲空的參數,默認值爲None

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

非常簡單,直觀,有效的解決方案。 – tmthyjames

4

是 - 您使用下面的結構:

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

看到的片段在http://flask.pocoo.org/snippets/57/