【问题标题】:How do I change the Django form.errors display text?如何更改 Django form.errors 显示文本?
【发布时间】:2022-12-15 00:10:56
【问题描述】:

I want to remove the circled bit from being displayed. 我该怎么做?

{% 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 django-forms


    【解决方案1】:

    Django Form 有两个错误处理程序:

    • Form.errors 是字段错误。默认情况下,键“字段名称”的字典:值“字段错误”

    • Form.non_field_errors 是与字段名无关的一般错误,主要是来自 Form.clean(..) 方法的错误。

    所以你试图做一个反模式和分散用户体验的注意力。因此,您可以通过将每个字段映射到它的值来获得更好的体验,而无需在错误中呈现字段名称。

    表单自定义呈现将使您能够完全访问 Form API,并允许您以您喜欢的方式显示错误,而无需默认呈现,类似于以下 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 %}
    

    通过上述操作,您还需要渲染 non_field 错误,完整的 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 还为每个字段提供 manual render,如下所示:

    {{ 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>
    

    选择最适合您需求的。


    您仍然可以做一些棘手的事情,这不是最佳实践,并且会导致字段验证和非字段验证之间发生冲突,如下所示Getting a list of errors in a Django form

    {% 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 %}
    

    【讨论】:

      【解决方案2】:

      在 Django 4.0 或更高版本中

                      {%  if form.errors  %}
                          {% for error in form.errors.as_data.values %}
                              {% for data in error.0 %}
                                  {{ data }}
                              {% endfor %}
                          {% endfor %}
                      {% endif %}
      

      【讨论】:

        猜你喜欢
        • 2018-12-11
        • 1970-01-01
        • 2011-10-13
        • 2012-07-29
        • 2018-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多