Подтвердить что ты не робот

Получение списка ошибок в форме Django

Я пытаюсь создать форму в Django. Это работает и все, но я хочу, чтобы все ошибки находились в верхней части формы, а не рядом с каждым полем с ошибкой. Я пробовал зацикливаться на form.errors, но он только показывал имя поля с ошибкой, а не сообщение об ошибке, такое как "Name is required".

Это в значительной степени то, что я хотел бы использовать в верхней части формы:

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

Что я буду использовать для ??? там? Это не errors; который просто выводит имена полей.

4b9b3361

Ответ 1

form.errors - словарь. Когда вы выполняете {% for error in form.errors %} ошибка соответствует ключу.

Вместо этого попробуйте

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

Etc.

Ответ 2

Если вы хотите, чтобы что-то простое с условием выполнялось так:

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

Если вы хотите получить дополнительную информацию и посмотреть имя и ошибку поля, сделайте следующее:

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

Если вы хотите понять, что form.errors - большой словарь.

Ответ 3

Дэннис ответ не очень хорошая идея. Вы можете получить ValueError.

Check this.

       {% if form.errors %}
            {% for field in form %}
                {% for error in field.errors %}
                     {{field.label}}: {{ error|escape }}
                {% endfor %}
            {% endfor %}
            {% for error in form.non_field_errors %}
                 {{ error|escape }}
            {% endfor %}
        {% endif %}