Как изменить отображаемый текст 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 %}
Вернуться на верх