Получение имени кнопки в качестве ввода

В этом примере я назначаю переменной (hsname) школу, выбранную при отправке формы:

<form class = "w3-wide" action = "/hschool" method = "post">
    <input list = "hschools" name = "hsname" autocomplete = "off">
        <datalist id = "hschools">
            <option value= "hs1">
            <option value= "hs2">
        </datalist>
    <input type = "submit">
</form>

Затем я использую это значение в python (с колбой), и чтобы получить его, я использую следующее (в отдельном файле .py):

hsname = request.form.get("hsname")

Предыдущее работает нормально.

Аналогичным образом я хочу присвоить переменной имя кнопки, которую нажимает пользователь (b1 или b2). Следующее не работает, поскольку нет переменной, которая записывает кнопку, которую нажимает пользователь.

<form class = "w3-wide" action = "/subject" method = "post">
            <button class = "button button4" name = "b1">b1</button>
            <button class = "button button4" name = "b2">b2</button>
</form>

Как мне это сделать?

Я знаю, что могу использовать здесь переключатель, но с эстетической точки зрения я бы предпочел использовать обычную кнопку. Я знаю, что могу использовать метод onclick, но что мне писать внутри, чтобы в нем хранилась переменная, которая напрямую отправляется во флягу?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
2 505
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете поместить свою кнопку в форму со скрытым вводом и получить доступ к значению с помощью request.form.get("hsname") или request.POST.get("hsname) в зависимости от того, как это реализует flask (я больше знаком с django).

Обратите внимание, что вам понадобится 1 форма + ввод для каждой кнопки

<form method = "POST" action = "some_url/">
    <input type = "hidden" name = "hsname" value = "the_name_of_the_button">
    <button class = "button button4" type = "submit"></button> 
</form>

Обновлено: это html 4.1, для html 5 см. Ответ zvone.

Вы можете создать id для каждой кнопки, которая может быть захвачена на стороне клиента и отправлена ​​на сервер через ajax:

<html>
 <head>   
   <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
 </head> 
     <input type='text' id='value'>   
     <button class = "button button4" name = "b1">b1</button>
     <button class = "button button4" name = "b2">b2</button>
 </form>
  <div id='user_results'></div>
 <script>
   $(document).ready(function() {
      $('button').click(function(even){
         var the_id = event.target.id;
         var user_input = $('#value').val();
         $.ajax({
           url: "/get_user_data",
           type: "get",
           data: {btn: the_id, result:iuser_input},
           success: function(response) {
            $('user_results').html(response);
          },
          error: function(xhr) {
           //Do Something to handle error
         }
        });
       });
   });
 </script>
</html>

Затем в вашем файле .py создайте маршрут для получения данных от ajax:

@app.route('/get_user_data')
def get_data():
   button_id = flask.request.args.get('btn')
   user_input = flask.request.args.get('result')
   return '<p>Thanks</p>'

А как мне получить эту переменную из фляги? Могу ли я использовать что-то похожее на: hsname = request.form.get ("hsname") ??

MTT 03.05.2018 21:39
Ответ принят как подходящий

Если вы хотите отправить информацию на сервер сразу после нажатия кнопки, вы можете передать name и value в html <button>, и они будут отправлены с формой:

<form class = "w3-wide" action = "/subject" method = "post">
    <button type = "submit" name = "clicked_btn" value = "b1">b1</button>
    <button type = "submit" name = "clicked_btn" value = "b2">b2</button>
</form>

После нажатия одной из этих кнопок форма будет отправлена, а имя и значение (например, clicked_btn=b1) будут отправлены на сервер (вместе с любыми другими входными данными в форме).

С другой стороны, если вы хотите просто запомнить состояние кнопки, чтобы она вела себя как флажок или переключатель, только для отправки на сервер при нажатии (другой) кнопки отправки, тогда я предлагаю фактически используя флажок или переключатель и изменяя его внешний вид с помощью CSS, чтобы он выглядел как кнопка.

Вы также можете использовать javascript для хранения некоторой информации на входе <input type=hidden>, которая позже будет отправлена ​​на сервер.

Спасибо! Это то, что мне было нужно! Действительно ценю это ;)

MTT 03.05.2018 21:46

Другие вопросы по теме