Структура URL и форма сообщений с Flask
В Flask вы пишете маршрут над объявлением метода следующим образом:
@app.route('/search/<location>/')
def search():
return render_template('search.html')
Однако в HTML как форма будет размещать на URL таким образом
www.myapp.com/search?location=paris
последний, кажется, возвращает 404 из приложения, где
www.myapp.com/search/london
вернется, как ожидалось.
Я уверен, что есть простая часть загадки, которую я не понимаю, но, конечно, механизм маршрутизации рассмотрит параметры строки запроса для соответствия требованиям правил.
Если нет, то каково оптимальное решение для этого сценария, так как я уверен, что 90% разработчиков должны прийти к этому моменту...
заранее спасибо.
1 ответ
Параметры запроса не включаются как часть сопоставления маршрута и не вводятся в аргументы функции. Только соответствующие части URL вводятся. То, что вы ищете, это request.args
(Получить параметры запроса), request.form
(POST) или request.values
(В сочетании).
Вы можете сделать что-то вроде этого, если вы хотите поддержать оба:
@app.route('/search/<location>')
def search(location=None):
location = location or request.args.get('location')
# perform search
Хотя, если вы захотите выполнить поиск по другим параметрам, возможно, лучший способ сделать это будет ближе к:
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)
И так далее.