2013-12-17 20 views
8

我在瓶的应用程序的server.py以下路由定义:瓶路线的URL与浮点数给予404

@app.route('/nearby/<float:lat>/<float:long>') 
def nearby(lat, long): 
    for truck in db.trucks.find({'loc': {'$near': [lat, long]}}).limit(5): 
     if truck.has_key('loc'): 
      del truck['loc'] 
    return json.dumps(trucks) 

但是,当我去http://localhost:5000/nearby/37.7909470419234/-122.398633589404,我得到一个404

其他路线工作正常,所以这是这个问题。我在这里做错了什么?

+0

简单的数字有效吗? '/附近/ 42/42'? –

+2

您是否只尝试过正浮点值?我记得在werkzeug路由上看到,对于浮点数,负数是不允许的。 http://werkzeug.pocoo.org/docs/routing/ – codegeek

+0

@codegeek是对的。负数不支持。如此处所述:http://werkzeug.pocoo.org/docs/routing/#werkzeug.routing.FloatConverter –

回答

8

由于内置的​​FloatConverter只能处理正数,因此我将坐标作为字符串传递,并使用Python的float()方法将它们转换为浮点数。

16

内置的FloatConverter不处理负数。写一个自定义转换器来处理底片。此转换器也将整数视为浮点数,这也会失败。

from werkzeug.routing import FloatConverter as BaseFloatConverter 

class FloatConverter(BaseFloatConverter): 
    regex = r'-?\d+(\.\d+)?' 

# before routes are registered 
app.url_map.converters['float'] = FloatConverter 

内置不处理整数,因为那时/1/1.0将指向相同的资源。为什么它不处理负面价值不太清楚。