2012-11-27 3 views
6

WTForm検証エラーをフラッシュしようとしています。私はthis snippetを発見し、わずかにそれを修正:ここFlask-WTFform:Flashにエラーが表示されない

def flash_errors(form): 
    """Flashes form errors""" 
    for field, errors in form.errors.items(): 
     for error in errors: 
      flash(u"Error in the %s field - %s" % (
       getattr(form, field).label.text, 
       error 
      ), 'error') 

は私のフォームクラスの1つです:

class ContactForm(Form): 
    """Contact form""" 
    # pylint: disable=W0232 
    # pylint: disable=R0903 
    name = TextField(label="Name", validators=[Length(max=35), Required()]) 
    email = EmailField(label="Email address", 
         validators=[Length(min=6, max=120), Email()]) 
    message = TextAreaField(label="Message", 
          validators=[Length(max=1000), Required()]) 
    recaptcha = RecaptchaField() 

とビュー:

@app.route("/contact/", methods=("GET", "POST")) 
def contact(): 
    """Contact view""" 
    form = ContactForm() 
    flash_errors(form) 
    if form.validate_on_submit(): 
     sender = "%s <%s>" % (form.name.data, form.email.data) 
     subject = "Message from %s" % form.name.data 
     message = form.message.data 
     body = render_template('emails/contact.html', sender=sender, 
           message=message) 
     email_admin(subject, body) 
     flash("Your message has been sent. Thank you!", "success") 

    return render_template("contact.html", 
          form=form) 

しかし、エラーが検証の失敗時に点滅されていません。データが有効なときに私の成功メッセージが点滅するので、フォームとテンプレートがうまく動作することがわかります。なにが問題ですか?

答えて

10

あなたはまだ

フォームを処理していないので、エラーがまだありませんが、あなたが投稿直前、私がいることを自分自身をrelized validate_on_submit方法

@app.route("/contact/", methods=("GET", "POST")) 
def contact(): 
    """Contact view""" 
    form = ContactForm() 
    if form.validate_on_submit(): 
     sender = "%s <%s>" % (form.name.data, form.email.data) 
     subject = "Message from %s" % form.name.data 
     message = form.message.data 
     body = render_template('emails/contact.html', sender=sender, 
           message=message) 
     email_admin(subject, body) 
     flash("Your message has been sent. Thank you!", "success") 
    else: 
     flash_errors(form) 

    return render_template("contact.html", 
         form=form) 
+1

elseflash_errorsを入れてみてください。ありがとう! –

+3

質問を入力するだけで、問題の考え方が異なったり分かりやすくなることがあります。 –

+0

私はそこにあなたの簡潔な声明に投票します。私はちょうど同じ経験を自分自身、ここに:http://stackoverflow.com/questions/19152471/what-is-the-technique-of-presenting-again-form-which-contains-error – swdev

関連する問題