2012-01-04 16 views
5

En Frasco que escribir la ruta por encima de la declaración de un método de este modo:estructura y la forma de URL mensajes con el frasco

@app.route('/search/<location>/') 
def search(): 
    return render_template('search.html') 

Sin embargo, en HTML como forma fijará a la url de esta manera

www.myapp.com/search?location=paris 

el último parece devolver un 404 de la aplicación donde

www.myapp.com/search/london 

volverá como se esperaba.

Estoy seguro de que hay una pieza del rompecabezas que no estoy obteniendo, pero seguramente el motor de enrutamiento considerará los parámetros de cadena de consulta para cumplir con los requisitos de las reglas.

Si no lo que es la solución óptima para este escenario ya que estoy seguro 90% de los desarrolladores debe llegar a este punto ...

gracias de antemano.

Respuesta

9

Los parámetros de consulta no se incluyen como parte de la coincidencia de ruta ni se insertan en los argumentos de la función. Solo se inyectan las porciones de URL coincidentes. Lo que está buscando es request.args (parámetros de consulta GET), request.form (POST) o request.values (combinado).

Se podría hacer algo como esto si usted quiere apoyar tanto:

@app.route('/search/<location>') 
def search(location=None): 
    location = location or request.args.get('location') 
    # perform search 

Aunque, en el supuesto es posible que desee buscar en otros parámetros, probablemente la mejor manera de hacerlo sería más cercano a:

def _search(location=None,other_param=None): 
    # perform search 

@app.route('/search') 
def search_custom(): 
    location = request.args.get('location') 
    # ... get other params too ... 
    return _search(location=location, other params ...) 

@app.route('/search/<location>') 
def search_location(location): 
    return _search(location=location) 

Y así sucesivamente.

+2

¡Gracias! viniendo de un fondo .net algunas cosas que deberían ser obvias a veces son difíciles de alcanzar. ¡adelante y hacia arriba! – Jay

+0

Esta fue una exploración útil de request.args, request.form y request.values ​​- gracias – ghukill

Cuestiones relacionadas