2010-01-09 11 views
21

Estoy intentando crear un formulario en Django. Eso funciona y todo, pero quiero que todos los errores estén en la parte superior del formulario, no al lado de cada campo que tenga el error. Probé bucle sobre form.errors, pero sólo mostró el nombre del campo que se detectó un error, no un mensaje de error como "El nombre es necesario."Obtener una lista de errores en una forma Django

Esto es más o menos lo que me gustaría ser capaz de utilizar en la parte superior de la forma:

{% if form.??? %} 
    <ul class="errorlist"> 
    {% for error in form.??? %} 
     <li>{{ error }}</li> 
    {% endfor %} 
    </ul> 
{% endif %} 

¿Qué iba a utilizar para ??? allí? No es errors; que solo muestra los nombres de los campos.

Respuesta

43

form.errors es un diccionario. Cuando lo haga {% for error in form.errors %}, el error corresponde a la clave.

En lugar de tratar

{% for field, errors in form.errors.items %} 
    {% for error in errors %} 
... 

Etc.

+0

Al hacer esto, muestra una lista con cuatro elementos, cada uno con un carácter: "s", "a", "a" y "m". El formulario específico que estoy usando es el formulario de registro en django-registration. – icktoofay

+0

Después de depurar esto un poco, "s", "a", "a" y "m" son la segunda letra del nombre de los campos. Eso es algo extraño, pero marcaré tu respuesta como la respuesta, ya que creo que podré resolverlo desde aquí. – icktoofay

+6

Probablemente solo necesite llamar .items() en el diccionario, que devuelve una secuencia de tuplas de (clave, valor) que se descomprimirán en su (campo, errores). –

2

Si quieres algo sencillo con una condición toman de esta manera:

{% if form.errors %} 
    <ul> 
    {% for error in form.errors %} 
     <li>{{ error }}</li> 
    {% endfor %} 
    </ul> 
{% endif %} 

Si desea más información y ver el nombre y el error del campo, haga esto:

{% if form.errors %} 
    <ul> 
    {% for key,value in form.errors.items %} 
     <li>{{ key|escape }} : {{ value|escape }}</li> 
    {% endfor %} 
    </ul> 
{% endif %} 

Si quieren understant form.errors es un diccionario grande.

Cuestiones relacionadas