Flask-WTFform: Flash does not display errors

I am trying to perform a WTForm error check. I found this snippet and modified it a bit:

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

Here is one of my form classes:

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

And view:

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

However, validation errors are not displayed. I know that my forms and templates work fine, because my success message flashes when the data is valid. What's wrong?

+6
source share
1 answer

There are no errors yet, because you have not processed the form

Try putting flash_errors in else the validate_on_submit method

 @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) 
+10
source

All Articles