2012-11-27 7 views
6

Ich versuche WTForm Validierungsfehler zu blinken. Ich fand this snippet und es leicht modifiziert:Flask-WTFform: Flash zeigt keine Fehler an

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

Hier eine meiner Form Klassen ist:

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

und Aussicht:

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

werden jedoch keine Fehler bei der Validierung Ausfälle geflasht. Ich weiß, dass meine Formulare und Vorlagen gut funktionieren, weil meine Erfolgsmeldung blinkt, wenn die Daten gültig sind. Was ist falsch?

Antwort

10

Es gibt keine Fehler noch, weil Sie nicht das Formular noch

Versuchen verarbeitet die flash_errors auf dem else des validate_on_submit Methode setzen

@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

ich relized dass mich direkt vor euch auf dem Laufenden. Vielen Dank! –

+3

Ich denke, manchmal hilft nur das Tippen der Fragen, um über das Problem anders oder klarer nachzudenken. –

+0

Ich stimme für Ihre prägnante Aussage dort i_4_got ab. Ich habe die selbe Erfahrung selbst, hier: http://stackoverflow.com/questions/19152471/what-is-the-technique-of-presenting-again-form-which-contains-error – swdev