目前在WTForms中访问错误,你必须循环遍历字段错误,如下所示:
for error in form.username.errors:
print error
由于我正在构建一个不使用表单视图的休息应用程序,因此我不得不检查所有表单字段以查找错误所在。
有没有办法可以做类似的事情:
for fieldName, errorMessage in form.errors:
...do something
答案 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 %}
希望有帮助。