2016-03-18 23 views
1

Böyle bir seyahat planlama formunu oluşturmak için gereken düşünün:Flask & WTForms: Birden çok gönderme düğmeli bir form nasıl oluşturulur?

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

İkisi (tarafından başlayarak) gönderme düğmeleri vardır (ile gelen). Örnek, iki düğmeli bir kullanım tablosunu göstermek için yapaytır, bu yüzden kullanılabilirliği tartışmayalım.

Bunu Flask ve WTForms ile nasıl yapabilirim?

Hangi düğmeye basıldığını nasıl görebilirsiniz?

cevap

7

Formunuzdaki gönderme düğmesinin veri değeri, basılmışsa True olacaktır. İki gönderme düğmesi ve tek giriş alanı olan bir formun çok basit örneğini görün.

<!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> 
: Burada
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) 

şablon dosyası index.html var