web-dev-qa-db-ja.com

Flask Pythonボタン

ページに2つのボタンを作成しようとしています。それぞれ、サーバー上で異なるpythonスクリプトを実行したいと思います。これまでのところ、使用して1つのボタンを取得/収集することができました

def contact():
  form = ContactForm()

  if request.method == 'POST':
    return 'Form posted.'

  Elif request.method == 'GET':
     return render_template('contact.html', form=form)

押されたボタンに基づいて何を変更する必要がありますか?

46
dojogeorge

2つのボタンに同じ名前と異なる値を付けます。

<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)
94
Miguel

これを行うための適切な方法:

@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">
23

誰かがまだ探していて、私と同じようにこのSO投稿に出くわした場合に備えて。

<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')

シンプルで簡潔、そして機能します。フォームオブジェクトをインスタンス化する必要さえありません。

8
poply

次の方法で処理します。

<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 __== '__main__':
        app.run()
4
user3427630

(異なる)名前属性を両方のボタンに適用します

<button name="one">

request.dataでキャッチします。

2

私はこの解決策が良いと思う:

@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')
1
slinden