2011-06-24 17 views
10

Actualmente en WTForms para acceder a los errores que tienen que recorrer los errores de campo de este modo:WTForms conseguir los errores

for error in form.username.errors: 
     print error 

Desde que estoy construyendo una aplicación que utiliza resto no hay vistas de formulario, estoy obligado a comprobar a través de todos los campos de formulario para encontrar dónde se encuentra el error.

¿Hay alguna manera de que pudiera hacer algo como:

for fieldName, errorMessage in form.errors: 
     ...do something 

Respuesta

22

El form objeto real tiene un atributo errors que contiene los nombres de campo y sus errores en un diccionario. Por lo que podría hacer:

for fieldName, errorMessages in form.errors.items(): 
    for err in errorMessages: 
     # do something with your errorMessages for fieldName 
+2

'form.errors.items()' en Python3 :-) – dthor

15

para cualquiera que quiera hacer esto en las plantillas de petaca:

{% for field in form.errors %} 
{% for error in form.errors[field] %} 
    <div class="alert alert-error"> 
     <strong>Error!</strong> {{error}} 
    </div> 
{% endfor %} 
{% endfor %} 
12

Una solución más limpia para las plantillas Frasco:

Python 3:

{% for field, errors in form.errors.items() %} 
<div class="alert alert-error"> 
    {{ form[field].label }}: {{ ', '.join(errors) }} 
</div> 
{% endfor %} 

Python 2:

{% for field, errors in form.errors.iteritems() %} 
<div class="alert alert-error"> 
    {{ form[field].label }}: {{ ', '.join(errors) }} 
</div> 
{% endfor %} 
+0

Este es el mejor esfuerzo en esta página. Pero parece que alguien tomó una mierda en mi formulario. También expone los nombres de los formularios, para que mis usuarios finales descubran qué es realmente cli_tel ... ¿Aunque podría ser el único a quien le importa? –

+1

@PeterLada: esa es la cosa estúpida ... la variable de errores realmente no proporciona eso. Puedes hacerlo con algo como esto, creo: 'form [field] .name' – Wolph

+0

Si usas python3, usa' items() 'en lugar de' iteritems() ' – pors

Cuestiones relacionadas