【问题标题】:Getting a list of errors in a Django form获取 Django 表单中的错误列表
【发布时间】:2011-01-03 08:46:17
【问题描述】:

我正在尝试在 Django 中创建一个表单。这一切都有效,但我希望所有错误都在表单的顶部,而不是在每个有错误的字段旁边。我尝试循环遍历 form.errors,但它只显示有错误的字段的名称,而不是诸如“需要名称”之类的错误消息。

这几乎是我希望能够在表单顶部使用的内容:

{% if form.??? %}
    <ul class="errorlist">
    {% for error in form.??? %}
        <li>{{ error }}</li>
    {% endfor %}
    </ul>
{% endif %}

那里的??? 会用什么?不是errors;这只是输出字段的名称。

【问题讨论】:

    标签: python django django-templates django-forms


    【解决方案1】:

    form.errors 是一个字典。当你做{% for error in form.errors %}错误时对应的键。

    不如试试

    {% for field, errors in form.errors.items %}
        {% for error in errors %}
    ...
    

    等等

    【讨论】:

    • 执行此操作时,它会输出一个包含四个项目的列表,每个项目包含一个字符:“s”、“a”、“a”和“m”。我使用的具体表格是 django-registration 中的注册表单。
    • 调试了一下,“s”、“a”、“a”和“m”是字段名称的第二个字母。这有点奇怪,但我会把你的答案标记为答案,因为我想我可以从这里弄清楚。
    • 可能只需要在字典上调用 .items() ,它会返回一系列 (key, value) 元组,这些元组将解压到您的 (field, errors) 中。
    【解决方案2】:

    Dannys 的回答不是一个好主意。你可能会得到一个 ValueError。

    {% if form.errors %}
          {% for field in form %}
    
               {% for error in field.errors %}
                    {{field.label}}: {{ error|escape }}
               {% endfor %}
    
          {% endfor %}
    {% endif %}
    

    【讨论】:

    • 您能否详细说明一下ValueError其他答案的风险是什么?我问了这个问题,哦,九年前,所以我没有手头的代码来测试了,但如果我记得,当时接受的答案是有效的。
    【解决方案3】:

    如果你想要一些简单的条件,可以这样:

    {% if form.errors %}
      <ul>
        {% for error in form.errors %} 
          <li>{{ error }}</li>
        {% endfor %}
      </ul>
    {% endif %}  
    

    如果您想了解更多信息并查看字段的名称和错误,请执行以下操作:

    {% if form.errors %}
      <ul>
        {% for key,value in form.errors.items %} 
          <li>{{ key|escape }} : {{ value|escape }}</li>
        {% endfor %}
      </ul>
    {% endif %}
    

    如果你想了解form.errors 是一本大字典。

    【讨论】:

      【解决方案4】:

      你可以使用这个代码:

      {% if form.errors %}
          {% for field in form %}
              {% for error in field.errors %}
                  <div class="alert alert-danger">
                      <strong>{{ error|escape }}</strong>
                  </div>
              {% endfor %}
          {% endfor %}
      
          {% for error in form.non_field_errors %}
              <div class="alert alert-danger">
                  <strong>{{ error|escape }}</strong>
              </div>
          {% endfor %}
      
      {% endif %}
      

      这个添加https://docs.djangoproject.com/en/3.0/ref/forms/api/#django.forms.Form.non_field_error

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-20
        • 2014-07-06
        • 1970-01-01
        • 2013-11-01
        • 2010-11-16
        • 2019-10-04
        • 2011-01-24
        • 1970-01-01
        相关资源
        最近更新 更多