与瓶

2012-01-04 42 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