與瓶

2012-01-04 38 views
5

URL的結構和形式的帖子在瓶你寫像這樣的方法聲明上面的路線:與瓶

@app.route('/search/<location>/') 
def search(): 
    return render_template('search.html') 

然而,在HTML的形式將張貼到URL以這種方式

www.myapp.com/search?location=paris 

後者似乎從應用程序返回404,其中

www.myapp.com/search/london 

將按預期返回。

我確信有一個簡單的難題我沒有得到,但路由引擎肯定會考慮滿足規則要求的查詢字符串參數。

如果沒有什麼是此方案中的最佳解決方案,因爲我敢肯定,90%的開發者必須在此時到達...

在此先感謝。

回答

9

查詢參數不作爲路徑匹配的一部分包含在內,也不會被注入到函數參數中。只有匹配的URL部分被注入。您要查找的是request.args(GET查詢參數),request.form(POST)或request.values(組合)。

你可以做這樣的事情,如果你想支持:

@app.route('/search/<location>') 
def search(location=None): 
    location = location or request.args.get('location') 
    # perform search 

雖然,假設你可能要在其他參數,可能這樣做會更接近最佳方式搜索:

def _search(location=None,other_param=None): 
    # perform search 

@app.route('/search') 
def search_custom(): 
    location = request.args.get('location') 
    # ... get other params too ... 
    return _search(location=location, other params ...) 

@app.route('/search/<location>') 
def search_location(location): 
    return _search(location=location) 

等等。

+2

非常感謝!來自.net背景的一些事情應該是顯而易見的,有時難以捉摸。向上和向上! – Jay 2012-01-05 23:22:30

+0

這是對request.args,request.form和request.values的有用探索 - 謝謝 – ghukill 2014-07-31 14:37:36