使用标签而不是字段名称渲染表单错误

bro*_*000 12 python django django-forms

我想在模板中使用{{form.errors}}列出所有表单错误.这将生成一个表单字段列表和每个字段的错误的嵌套列表.但是,使用该字段的文字名称.在特定字段中生成的带有错误的html可能如下所示.

<ul class="errorlist">
    <li>
        target_date_mdcy
        <ul class="errorlist">
            <li>This field is required.</li>
        </ul>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我想使用错误列表功能,因为它很简单.但是,我想使用标签(比如说"目标日期")而不是字段名称.实际上,我想不出你希望为网页用户显示字段名称的情况.有没有办法使用带有字段标签的渲染错误列表?

Pet*_*per 9

我没有看到一个简单的方法来做到这一点.

表单的errors属性实际上返回一个ErrorDict定义的类django.forms.utils- 它是一个dict知道的子类,它将自身的ul呈现作为其unicode表示.但键实际上是字段名称,这对于维护其他行为很重要.因此它无法轻松访问字段标签.

您可以定义一个自定义模板标记,它接受表单以生成您喜欢的呈现,因为在Python代码中,很容易获得给定表单和字段名称的字段标签.或者,您可以在视图中按标签构造错误列表,将其添加到您的上下文中,然后使用它.

再次编辑,您可以迭代字段并检查其各自的错误,记住也要显示non_field_errors.就像是:

<ul class="errorlist">
  {% if form.non_field_errors %}
    <li>{{ form.non_field_errors }}</li>
  {% endif %}
  {% for field in form %}
    {% if field.errors %}
      <li>
        {{ field.label }}
        <ul class="errorlist">
          {% for error in field.errors %}
            <li>{{ error }}</li>
          {% endfor %}
        </ul>
      </li>
    {% endif %}
  {% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)

您可能希望将non_field_errors包装在列表中,具体取决于.


sch*_*ing 9

我知道这已经得到了解答,但我遇到了同样的情况,发现有一种简单的方法可以使用标签:

{% if form.errors %}
    <ul class="user-msg error">
    {% for field in form %}
        {% for error in field.errors %}
            <li>
              {% if field != '__all__' %}
                <strong>{{ field.label }}:</strong>
              {% endif %}
              {{ error }}
            </li>
        {% endfor %}
    {% endfor %}
    </ul>
{% endif %}
Run Code Online (Sandbox Code Playgroud)