WTForms得到错误

时间:2011-06-24 03:31:27

标签: python flask wtforms

目前在WTForms中访问错误,你必须循环遍历字段错误,如下所示:

for error in form.username.errors:
        print error

由于我正在构建一个不使用表单视图的休息应用程序,因此我不得不检查所有表单字段以查找错误所在。

有没有办法可以做类似的事情:

for fieldName, errorMessage in form.errors:
        ...do something

4 个答案:

答案 0 :(得分:26)

实际的form对象具有errors属性,该属性包含字典中的字段名称及其错误。所以你可以这样做:

for fieldName, errorMessages in form.errors.items():
    for err in errorMessages:
        # do something with your errorMessages for fieldName

答案 1 :(得分:18)

对于希望在Flask模板中执行此操作的任何人:

{% for field in form.errors %}
{% for error in form.errors[field] %}
    <div class="alert alert-error">
        <strong>Error!</strong> {{error}}
    </div>
{% endfor %}
{% endfor %}

答案 2 :(得分:15)

Flask模板的清洁解决方案:

Python 3:

{% for field, errors in form.errors.items() %}
<div class="alert alert-error">
    {{ form[field].label }}: {{ ', '.join(errors) }}
</div>
{% endfor %}

Python 2:

{% for field, errors in form.errors.iteritems() %}
<div class="alert alert-error">
    {{ form[field].label }}: {{ ', '.join(errors) }}
</div>
{% endfor %}

答案 3 :(得分:0)

ModelFormFields中与SqlAlchemy中的WTForms一起使用时,如果在对象内有嵌套的对象(外键关系),则可以按以下方式正确显示字段的相关错误

Python方面:

def flash_errors(form):
    for field, errors in form.errors.items():
        if type(form[field]) == ModelFormField:
            for error, lines in errors.iteritems():
                description = "\n".join(lines)
                flash(u"Error in the %s field - %s" % (
                    #getattr(form, field).label.text + " " + error,
                    form[field][error].label.text,
                    description
                ))
        else:
            for error, lines in errors.iteritems():
                description = "\n".join(lines)
                flash(u"Error in the %s field - %s" % (
                    #getattr(form, field).label.text + " " + error,
                    form[field].label.text,
                    description
                ))

金贾面:

  {% with messages = get_flashed_messages(with_categories=true) %}
    {% for message in messages %}
      {% if "Error" not in message[1]: %}
        <div class="alert alert-info">
          <strong>Success! </strong> {{ message[1] }}
        </div>
      {% endif %}

      {% if "Error" in message[1]: %}
        <div class="alert alert-warning">
         {{ message[1] }}
        </div>
      {% endif %}
    {% endfor %}
  {% endwith %}

希望有帮助。