Как изменить отображаемый текст Django form.errors?
Я хочу убрать обведенный бит из отображения. Как я могу это сделать?
{% if form.errors %}
<div class="alert alert-warning alert-dismissible fade show"
role="alert">
<p class="m-0">{{ form.errors }}</p>
<button type="button"
class="btn-close"
data-bs-dismiss="alert"
aria-label="Close">
</button>
</div>
{% endif %}
Это всегда отображается
- свойство, в котором обнаружена ошибка
- сообщение об ошибке
- сообщение об ошибке ...
Я хочу удалить свойство, в котором обнаружена ошибка. Как мне это сделать?
Django Form имеет два обработчика ошибок:
Form.errors
- это ошибки поля. По умолчанию, диктант ключа "имя поля" : значение "ошибки поля"Form.non_field_errors
- общие ошибки, не связанные с именем поля, в основном ошибки метода Form.clean(...).
Таким образом, вы пытаетесь сделать анти-паттерн и отвлекаете пользователя от работы. Поэтому вы можете добиться лучшего опыта, отображая каждое поле на его значение без необходимости отображения имени поля в ошибке.
Пользовательский рендеринг формы даст вам полный доступ к API Form
, и позволит вам отображать ошибку так, как вам нравится, без рендеринга по умолчанию, что-то вроде следующего looping over form's fields:
{% 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 %}
Выполняя вышеуказанные действия, вам также нужно будет вывести ошибки не_поля, и полные HTML-теги будут выглядеть следующим образом:
{{ form.non_field_errors }}
{% 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 также предлагает ручной рендеринг для каждого поля что-то вроде следующего:
{{ 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>
Выбирайте то, что лучше всего подходит для ваших нужд.
Вы все еще можете сделать хакерскую вещь, которая не является лучшей практикой и приведет к конфликтам между валидацией полей и валидацией без полей следующим образом Получение списка ошибок в форме Django:
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% endif %}
В Django 4.0 или выше
{% if form.errors %}
{% for error in form.errors.as_data.values %}
{% for data in error.0 %}
{{ data }}
{% endfor %}
{% endfor %}
{% endif %}