2011-08-17 53 views
17

看来Flask不支持带有URI编码组件的路由。我很好奇,如果我做错了什么,或者是否有我需要包含的特殊标志。带URI编码组件的瓶颈路由

我的路线看起来是这样的:

@app.route('/foo/<encoded>/bar/') 
def foo(encoded): 
    # ... 
    pass 

,这应该与能像这些的网址:

http://foobar.com/foo/xxx/bar/ # matched correctly, no URI component 
http://foobar.com/foo/x%2Fx%2Fx%2F/bar/ # not matched correctly, URI component 

原URL的作品,后者吐出了一个可爱的404

谢谢!

回答

24

添加path到您的URL规则:根据注释

@app.route('/foo/<path:encoded>/bar/')

更新:路由API文档是在这里:http://flask.pocoo.org/docs/api/#flask.Flask.route。实现了path风格路线转换器的基本类在这里:http://werkzeug.pocoo.org/docs/routing/#custom-converters(这是pocoostan的非常好的地区之一),至于尾随斜线,有特殊的规则,金额:

如果规则以斜线结尾,并且在 用户的请求中没有斜线,用户将自动重定向到同一页面,并附上 尾部斜线。

如果规则不以尾部斜线结尾,并且用户请求带有尾部斜杠的 页面,则会引发404未找到。

还铭记保持,如果你是在Apache和期待一个斜线落后的URL,即提交给http://ex.com/foo/<path:encoded>/barencoded一个书签获得一些与双斜线,Apache将多个斜线转换成一个。

+0

拉德,固定它。 – sholsapp

+3

如果其他人遇到同样的问题:我花了一分钟才意识到我们正在添加'path',而不是添加'encoded'。我尝试过,但未能添加“编码”后置过滤器,而不是“路径”前置过滤器。 – gwg

+0

你我都! –