2013-12-17 38 views
8

mam następującą definicję trasy w moim kolby aplikacji server.py:trasa Kolba dając 404 z liczb zmiennoprzecinkowych w adresie URL

@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) 

Ale kiedy idę do http://localhost:5000/nearby/37.7909470419234/-122.398633589404, otrzymuję 404.

Inne trasy działają dobrze, więc jest to problem z tym. Co ja tu robię źle?

+0

Czy działają prostsze numery? '/ nearby/42/42'? –

+2

Czy próbowałeś tylko dodatnich wartości zmiennoprzecinkowych? Pamiętam, że czytanie na routingu werkzeug, że dla pływaków, negatywny nie jest dozwolone. http://werkzeug.pocoo.org/docs/routing/ – codegeek

+0

@codegeek ma rację. Liczby ujemne nie są obsługiwane. Jak stwierdzono tutaj: http://werkzeug.pocoo.org/docs/routing/#werkzeug.routing.FloatConverter –

Odpowiedz

8

Ponieważ wbudowany FloatConverter może obsługiwać tylko liczby dodatnie, przekazuję współrzędne jako łańcuchy i używam metody float() Pythona, aby przekonwertować je na zmienne.

16

Wbudowany FloatConverter nie obsługuje liczb ujemnych. Napisz niestandardowy konwerter do obsługi negatywów. Ten konwerter traktuje również liczby całkowite jako wartości zmiennoprzecinkowe, co również nie powiodło się.

from werkzeug.routing import FloatConverter as BaseFloatConverter 

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

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

Wbudowany nie obsługuje liczb całkowitych, bo wtedy /1 i /1.0 będzie wskazywać na ten sam zasób. Dlaczego nie obsługuje wartości ujemnych jest mniej jasne.