2013-12-17 25 views
8

benim Matara uygulamanın server.py aşağıdaki rota tanımını var: Ben http://localhost:5000/nearby/37.7909470419234/-122.398633589404 gittiğinizde Ama bir 404.Matara rota

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

olsun

Diğer rotalar iyi çalışıyor, bu yüzden bununla ilgili bir sorun var. Burada neyi yanlış yapıyorum?

+0

Daha basit sayılar mı çalışıyor? '/ Yakın/42/42 '? –

+2

Sadece pozitif float değerlerini denediniz mi? Werkzeug yönlendirme üzerinde şamandıralar okuduğumu hatırlıyorum, negatiflere izin verilmiyor. http://werkzeug.pocoo.org/docs/routing/ – codegeek

+0

@ codegeek haklı. Negatif sayılar desteklenmez. Burada belirtildiği gibi: http://werkzeug.pocoo.org/docs/routing/#werkzeug.routing.FloatConverter –

cevap

8

Yerleşik FloatConverter yalnızca pozitif sayıları işleyebildiğinden, koordinatları dizeler olarak geçiriyorum ve bunları floatlara dönüştürmek için Python'un float() yöntemini kullanın.

16

Yerleşik FloatConverter, negatif sayıları işlemez. Negatifleri ele almak için özel bir dönüştürücü yazın. Bu dönüştürücü, tamsayıları aynı zamanda başarısız olan da yüzenler olarak ele alır. Sonra /1 ve /1.0 aynı kaynağa işaret ettiğinden

from werkzeug.routing import FloatConverter as BaseFloatConverter 

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

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

yerleşik tamsayılar işlemez. Neden olumsuz değerleri işlemez daha az açıktır.