Флаконы Python Buttons
Я пытаюсь создать две кнопки на странице. Каждый из них я хотел бы выполнить на сервере другой скрипт python. Пока мне удалось получить/собрать одну кнопку, используя
def contact():
form = ContactForm()
if request.method == 'POST':
return 'Form posted.'
elif request.method == 'GET':
return render_template('contact.html', form=form)
Что мне нужно изменить на основе нажатой кнопки?
Ответы
Ответ 1
Присвойте двум кнопкам одинаковое имя и разные значения:
<input type="submit" name="submit_button" value="Do Something">
<input type="submit" name="submit_button" value="Do Something Else">
Затем в функции просмотра Flask вы можете указать, какая кнопка была использована для отправки формы:
def contact():
if request.method == 'POST':
if request.form['submit_button'] == 'Do Something':
pass # do something
elif request.form['submit_button'] == 'Do Something Else':
pass # do something else
else:
pass # unknown
elif request.method == 'GET':
return render_template('contact.html', form=form)
Ответ 2
Подходящий способ сделать это:
@app.route('/')
def index():
if form.validate_on_submit():
if 'download' in request.form:
pass # do something
elif 'watch' in request.form:
pass # do something else
Вставьте watch
и download
кнопки в свой шаблон:
<input type="submit" name="download" value="Download">
<input type="submit" name="watch" value="Watch">
Ответ 3
В случае, если кто-то все еще смотрел и наткнулся на этот ТАК пост, как я.
<input type="submit" name="open" value="Open">
<input type="submit" name="close" value="Close">
def contact():
if "open" in request.form:
pass
elif "close" in request.form:
pass
return render_template('contact.html')
Просто, кратко, и это работает. Даже не нужно создавать экземпляр объекта формы.
Ответ 4
Я обрабатываю его следующим образом:
<html>
<body>
<form method="post" action="/">
<input type="submit" value="Encrypt" name="Encrypt"/>
<input type="submit" value="Decrypt" name="Decrypt" />
</div>
</form>
</body>
</html>
Код Python:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/", methods=['GET', 'POST'])
def index():
print(request.method)
if request.method == 'POST':
if request.form.get('Encrypt') == 'Encrypt':
# pass
print("Encrypted")
elif request.form.get('Decrypt') == 'Decrypt':
# pass # do something else
print("Decrypted")
else:
# pass # unknown
return render_template("index.html")
elif request.method == 'GET':
# return render_template("index.html")
print("No Post Back Call")
return render_template("index.html")
if __name__ == '__main__':
app.run()
Ответ 5
Применить (другой) атрибут имени для обеих кнопок
<button name="one">
и поймать их в request.data.
Ответ 6
Я думаю, что это решение хорошо:
@app.route('/contact', methods=['GET', 'POST'])
def contact():
form = ContactForm()
if form.validate_on_submit():
if form.submit.data:
pass
elif form.submit2.data:
pass
return render_template('contact.html', form=form)
Форма:
class ContactForm(FlaskForm):
submit = SubmitField('Do this')
submit2 = SubmitField('Do that')