Как показать ошибки валидации в шаблоне с помощью CreateView Django

Я использую расширенную модель User и общий CreateView.

class SignUp(CreateView):
    form_class = forms.SignUpForm
    success_url = '/accounts/login/'
    template_name = 'accounts/signup.html'

Как получить доступ к ошибкам валидации формы в моем шаблоне? Они должны быть там, потому что когда я делаю {{ form.as_p }}, ошибки появляются. Я пробовал {{ form.errors }} и {{ field.errors }}, но в них ничего нет. Есть ли простой тег, который я могу вызвать в моем шаблоне, чтобы показать ошибки? Спасибо.

Вы можете сделать это вручную, если хотите. Каждое поле доступно как атрибут формы с помощью {{ form.name_of_field }}, и в шаблоне Django будет отображаться соответствующим образом. Например:

{{ form.non_field_errors }}
<div class="fieldWrapper">
    {{ form.subject.errors }}
    <label for="{{ form.subject.id_for_label }}">Email subject:</label>
    {{ form.subject }}
</div>
<div class="fieldWrapper">
    {{ form.message.errors }}
    <label for="{{ form.message.id_for_label }}">Your message:</label>
    {{ form.message }}
</div>
<div class="fieldWrapper">
    {{ form.sender.errors }}
    <label for="{{ form.sender.id_for_label }}">Your email address:</label>
    {{ form.sender }}
</div>
<div class="fieldWrapper">
    {{ form.cc_myself.errors }}
    <label for="{{ form.cc_myself.id_for_label }}">CC yourself?</label>
    {{ form.cc_myself }}
</div>

и если вы хотите зациклить все ошибки один раз на верхней странице.

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

Если вы используете один и тот же HTML для каждого из полей формы, вы можете сократить дублирование кода, перебирая каждое поле по очереди с помощью цикла {% for %}:

{% for field in form %}
    <div class="fieldWrapper">
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
        {% if field.help_text %}
        <p class="help">{{ field.help_text|safe }}</p>
        {% endif %}
    </div>
{% endfor %}

Вы можете проверить многие методы для этого в документации Django в следующем URL https://docs.djangoproject.com/en/4.0/topics/forms/#looping-over-the-form-s-fields

Вернуться на верх