2013-12-17 2 views
8

は、私は私のフラスコアプリのserver.pyで、次のルート定義している:私はhttp://localhost:5000/nearby/37.7909470419234/-122.398633589404に行くときしかし、私は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) 

を取得します

他のルートも正常に動作するので、このルートでは問題があります。私はここで間違って何をしていますか?

+0

単純な数字の仕事をしますか? '/ nearby/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のフロート()メソッドを使用します。

16

ビルトインFloatConverter負の数を処理しません。ネガを扱うカスタムコンバータを作成します。また、この変換器は整数も浮動小数点として扱いますが、これも失敗します。その後、/1/1.0同じリソースを指すようになるので

from werkzeug.routing import FloatConverter as BaseFloatConverter 

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

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

ビルトインは整数を処理しません。負の値を扱わない理由はそれほど明確ではありません。

関連する問題