2016-03-18 7 views
1

は、私はこのような旅行計画のフォームを構築する必要があります想像フラスコ&WTForms:複数の送信ボタンでフォームを作成するには?

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

両方(で始まる)(で到着)ボタンを提出しています。この例は、2ボタンの使用法を示すために人工的であるため、使いやすさについては説明しません。

FlaskとWTFormsでどうすればいいですか?

実際にどのボタンが押されたかを確認するにはどうすればよいですか?

答えて

7

フォームの送信ボタンのデータ値は、押された場合はTrueになります。下記の非常に単純な例を参照してください。フォームは2つの送信ボタンと1つの入力フィールドで構成されています。

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> 
関連する問題