WTForms 得到错误
Posted
技术标签:
【中文标题】WTForms 得到错误【英文标题】:WTForms getting the errors 【发布时间】:2011-09-21 17:24:46 【问题描述】:目前在 WTForms 中要访问错误,您必须像这样遍历字段错误:
for error in form.username.errors:
print error
由于我正在构建一个不使用表单视图的 rest 应用程序,因此我不得不检查所有表单字段以找出错误所在。
有没有办法可以做类似的事情:
for fieldName, errorMessage in form.errors:
...do something
【问题讨论】:
【参考方案1】:使用SqlAlchemy
中的ModelFormFields
与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 %
希望对您有所帮助。
【讨论】:
【参考方案2】:实际的form
对象有一个errors
属性,其中包含字典中的字段名称及其错误。所以你可以这样做:
for fieldName, errorMessages in form.errors.items():
for err in errorMessages:
# do something with your errorMessages for fieldName
【讨论】:
【参考方案3】:更简洁的 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 %
【讨论】:
这是此页面上的最大努力。但看起来有人在我的表格上胡扯。还公开了表单名称,以便我的最终用户弄清楚 cli_tel 实际上是什么......虽然我可能是唯一关心的人? @PeterLada:那是愚蠢的事情......错误变量并没有真正提供。我认为你可以这样做:form[field].name
如果你使用python3,使用items()
而不是iteritems()
而不是只使用label
。使用label.text
。即:flash(''.join([f'form[f].label.text: "".join(e) ' for f, e in form.errors.items()]))
。删除 html。【参考方案4】:
对于希望在 Flask 模板中执行此操作的任何人:
% for field in form.errors %
% for error in form.errors[field] %
<div class="alert alert-error">
<strong>Error!</strong> error
</div>
% endfor %
% endfor %
【讨论】:
以上是关于WTForms 得到错误的主要内容,如果未能解决你的问题,请参考以下文章
在 wtforms 中打印 form.validate_on_submit() 时我得到 False 并且我也设置了密钥