Как показать ошибки валидации в шаблоне с помощью 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