В этом примере я назначаю переменной (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, но что мне писать внутри, чтобы в нем хранилась переменная, которая напрямую отправляется во флягу?






Вы можете поместить свою кнопку в форму со скрытым вводом и получить доступ к значению с помощью 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>'
Если вы хотите отправить информацию на сервер сразу после нажатия кнопки, вы можете передать 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>, которая позже будет отправлена на сервер.
Спасибо! Это то, что мне было нужно! Действительно ценю это ;)
А как мне получить эту переменную из фляги? Могу ли я использовать что-то похожее на: hsname = request.form.get ("hsname") ??