【问题标题】:Flask & WTForms: How to make a form with multiple submit buttons? [duplicate]Flask & WTForms:如何制作带有多个提交按钮的表单? [复制]
【发布时间】:2016-07-05 13:55:52
【问题描述】:

假设我需要建立一个这样的旅行计划表格:

Going from [_Picadily_Circus____]
Going to [_Marylebone_____]
(Starting by) (Arriving by) [5]:[30][pm]

两个(开始)(到达)都是提交按钮。该示例是人工展示的两个按钮用例,因此我们不讨论可用性。

如何使用 Flask 和 WTForms 做到这一点?

如何查看实际按下的是哪个按钮?

【问题讨论】:

    标签: python flask wtforms flask-wtforms


    【解决方案1】:

    如果您按下表单的提交按钮,其数据值将为True。请参见下面非常简单的表单示例,该表单具有两个提交按钮和一个输入字段。

    from flask import Flask, render_template, flash
    from flask.ext.wtf import Form
    from wtforms import StringField, SubmitField
    from wtforms.validators import DataRequired
    
    app = Flask(__name__)
    app.config['DEBUG'] = True
    app.config['SECRET_KEY'] = 'well-secret-password'
    
    
    class MyForm(Form):
        name = StringField(label='Name', validators=[DataRequired()])
        starting = SubmitField(label='Starting')
        ending = SubmitField(label='Ending')
    
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        form = MyForm()
    
        if form.validate_on_submit():
            print "Starting data Value : {value}".format(value=form.starting.data)
            print "Ending data Value : {value}".format(value=form.ending.data)
            flash(
                "You submitted name {name} via button {button}".format(
                    name=form.name.data,
                    button="Starting" if form.starting.data else "Ending"
                )
            )
    
            return render_template('index.html', form=form)
    
        if form.errors:
            for error_field, error_message in form.errors.iteritems():
                flash("Field : {field}; error : {error}".format(field=error_field, error=error_message))
    
        return render_template('index.html', form=form)
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    这是模板文件 index.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
        {% with messages = get_flashed_messages() %}
          {% if messages %}
            <ul class=flashes>
            {% for message in messages %}
              <li>{{ message }}</li>
            {% endfor %}
            </ul>
          {% endif %}
        {% endwith %}
    
        <form method="POST" action="{{ url_for('index') }}">
            {{ form.csrf_token }}
    
            {{ form.name.label }} {{ form.name(size=20) }}
            <br><br>
            {{ form.starting }}
            {{ form.ending }}
    
        </form>
    </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-12
      • 2021-03-05
      • 2016-06-17
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多