Flacon Python Boutons

Je tente de créer deux boutons sur une page. Chacun je voudrais effectuer un script Python différent sur le serveur. Jusqu'à présent, j'ai seulement réussi à obtenir / collecter un bouton en utilisant

def contact():
  form = ContactForm()

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

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

Que devrais-je changer en fonction du bouton enfoncé?

36
demandé sur dojogeorge 2013-11-05 21:07:27

6 réponses

Donnez à vos deux boutons le même nom et des valeurs différentes:

<input type="submit" name="submit_button" value="Do Something">
<input type="submit" name="submit_button" value="Do Something Else">

Ensuite, dans votre fonction Flask view, vous pouvez indiquer quel bouton a été utilisé pour soumettre le formulaire:

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)
77
répondu Miguel 2018-09-20 06:43:11

La façon appropriée de le faire:

Mettez les boutons watch et download dans votre modèle.

@app.route('/')
def index()
  if form.validate_on_submit():
    if 'download' in request.form:
       pass  
    elif 'watch' in request.form:
       pass ... etc
14
répondu Alexander.Iljushkin 2016-05-30 07:07:34

Au cas où quelqu'un regardait encore et tombait sur ce So post comme je l'ai fait.

<input type="submit" name="open" value="Open">
<input type="submit" name="close" value="Close">

def contact():
    if "open" in request.form:
        pass
    elif "close" request.form:
        pass
    return render_template('contact.html')

Simple, concis, et ça marche. N'avez même pas besoin d'instancier un objet de formulaire.

3
répondu poply 2018-03-16 18:14:40

Appliquer un attribut de nom (différent) aux deux boutons comme

<button name="one">

Et les attraper en demande.données.

2
répondu Paweł Pogorzelski 2013-11-05 17:16:29

Je le gère de la manière suivante:

<html>
    <body>

        <form method="post" action="/">

                <input type="submit" value="Encrypt" name="Encrypt"/>
                <input type="submit" value="Decrypt" name="Decrypt" />

            </div>
        </form>
    </body>
</html>

Code 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()
1
répondu user3427630 2018-03-12 17:59:36

Je pense que cette solution est bonne:

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

Forme:

class ContactForm(FlaskForm):

    submit = SubmitField('Do this')
    submit2 = SubmitField('Do that')
1
répondu slinden 2018-07-17 15:27:03