2013-12-17 22 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將指向相同的資源。爲什麼它不處理負面價值不太清楚。