Переменные URL и передача не входного значения из HTML в Python (Flask) - PullRequest
0 голосов
/ 03 июня 2019

Согласно этому вопросу вы можете отправлять данные только из форм ввода из html в Python с POST. Я пытаюсь выяснить, как передать значение (которое фактически изначально содержится в словаре, который я передал из Python) из HTML в Python.

Мои два подхода, которые я рассмотрел (и не выяснили, как сделать это успешно):

  1. Взгляните на быстрый запуск Flask , это должно быть довольно просто. Я просто не уверен, как должен выглядеть синтаксис на стороне html для передачи в этом parkCode.
@app.route('/park/<parkCode>', methods =['GET', 'POST'])
def park(parkCode):
    return render_template('park.html', parkCode = parkCode)
  1. В качестве альтернативы, есть ли способ просто отправить строку из html в Python без , используя форму ввода? Я еще не нашел способ сделать это.

Для справки, это строка, куда я отправляю по словарю `` `parks``:

return render_template('search_results.html', parks=parks)

Затем в моем search_results.html файле:

{% for park in parks %}
    <div method = "POST" action = "/park"><a href="park.html">{{park["fullName"]}}</a></div>
{% endfor %}

Но я хочу отправить park["fullName"] на мой код Python.

1 Ответ

1 голос
/ 03 июня 2019
  1. .route decorator всегда обрабатывает только URL-пути. Поскольку form action является статическим значением в HTML, единственный способ изменить его - использовать JavaScript (например, путем изменения атрибута action во время отправки). Если вы собираетесь использовать JavaScript, вы можете также использовать JavaScript для отправки самого запроса, что приводит нас к

  2. Да, вы можете использовать AJAX для отправки запроса. Начиная с ES6, самый простой способ сделать это - fetch. Выбор, использовать ли форму или использовать AJAX, зависит от того, что вы хотите сделать после запроса: отправленная форма приводит к отображению новой страницы, в то время как запрос AJAX не может изменить текущую страницу, только вызывает код JavaScript ( хотя вы можете изменить страницу в JavaScript, если пожелаете).

По сути, вы не можете делать то, что хотите, без JavaScript. Третий вариант, который работает без JavaScript - это использование формы в том виде, в котором она предназначена. На стороне flask это подразумевает не именование параметра внутри маршрута, а использование request.args (для форм GET) или request.form (для форм POST):

@app.route('/park', methods =['POST'])
def park():
    parkCode = request.form.get('parkCode')
    return render_template('park.html', parkCode = parkCode)

с сопровождающим HTML:

<form action="/park" method="POST">
  <input name="parkCode"/>
  <input type="submit" value="Submit"/>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...