如何修改Django表单.错误显示文本?

kwvwclae  于 2022-12-20  发布在  Go
关注(0)|答案(2)|浏览(155)

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

始终显示

  • 发现错误的属性
  • 错误讯息
  • 错误消息...

我想删除发现错误的属性。我该怎么做?

5anewei6

5anewei61#

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

  • Form.errors为字段错误,默认为关键字“字段名”的字典:值“字段错误”
  • Form.non_field_errors是与字段名无关的常规错误,主要是来自Form.clean(..)方法的错误。

因此,您正在尝试做一个反模式,并分散用户体验的注意力。因此,您可以通过将每个字段Map到其值来获得更好的体验,而无需在错误中呈现字段名。
表单自定义呈现将给予您完全访问Form API,并允许您以自己喜欢的方式显示错误,而无需默认呈现,类似于以下在表单字段上的循环:

{% 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还为每个字段提供手动渲染,如下所示:

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

k2arahey2#

Django 4.0或更高版本

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

相关问题