2012-01-04 7 views
5

W Kolby piszesz trasę powyżej deklaracji metody tak:URL struktura i forma posty z kolbą

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

Jednak w HTML jako forma będzie pocztą na adres URL w ten sposób

www.myapp.com/search?location=paris 

ten ostatni wydaje się zwracać 404 z aplikacji, gdzie

www.myapp.com/search/london 

zwróci się zgodnie z oczekiwaniami.

Jestem pewien, że istnieje prosty element układanki, którego nie dostaję, ale na pewno silnik routingu uwzględni parametry ciągu zapytania w celu spełnienia wymagań reguł.

Jeśli nie to, co jest optymalnym rozwiązaniem dla tego scenariusza, jak jestem pewien, że 90% programistów musi przybyć w tym momencie ...

z góry dzięki.

Odpowiedz

9

Parametry zapytania nie są uwzględniane jako część dopasowania trasy, ani nie są wprowadzane do argumentów funkcji. Wstrzykiwane są tylko dopasowane części adresu URL. To, czego szukasz, to request.args (parametry zapytania GET), request.form (POST) lub request.values (łącznie).

Można zrobić coś takiego, jeśli chcesz obsługiwać zarówno:

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

Chociaż, zakładając, może chcesz szukać innych parametrów, prawdopodobnie najlepszy sposób, aby zrobić to byłoby bliżej:

I tak dalej.

+2

wielkie dzięki! pochodzące z tła .net, niektóre rzeczy, które powinny być oczywiste, są czasami nieuchwytne. naprzód i w górę! – Jay

+0

To była pomocna eksploracja request.args, request.form i request.values ​​- dziękuję – ghukill