views:

183

answers:

1

I'm trying to create a form in Django. That works and all, but I want all the errors to be at the top of the form, not next to each field that has the error. I tried looping over form.errors, but it only showed the name of the field that had an error, not an error message such as "Name is required."

This is pretty much what I'd like to be able to use at the top of the form:

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

What would I use for ??? there? It's not errors; that just outputs the names of the fields.

+7  A: 

form.errors is a dictionary. When you do {% for error in form.errors %} error corresponds to the key.

Instead try

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

Etc.

Danny Roberts
When doing this, it outputs a list with four items, each containing one character: "s", "a", "a", and "m". The specific form I'm using is the registration form in django-registration.
icktoofay
After debugging this a bit, "s", "a", "a", and "m" are the second letter of the name of the fields. That's somewhat odd, but I'll mark your answer as the answer, since I think I'll be able to figure it out from here.
icktoofay
Probably just need to call .items() on the dictionary, that returns a sequence of tuples of (key, value) that will unpack into your (field, errors).
Travis Bradshaw
@Travis good catch
Danny Roberts