現在WTFormsでエラーにアクセスするには、次のようなフィールドエラーをループする必要があります。
for error in form.username.errors:
print error
フォームビューを使用しないRESTアプリケーションを構築しているため、エラーがどこにあるかを見つけるために、すべてのフォームフィールドをチェックする必要があります。
私が次のようなことをする方法はありますか?
for fieldName, errorMessage in form.errors:
...do something
実際のform
オブジェクトには、辞書内のフィールド名とそのエラーを含む errors
属性があります。だからあなたはすることができます:
for fieldName, errorMessages in form.errors.items():
for err in errorMessages:
# do something with your errorMessages for fieldName
Flaskテンプレートでこれを実行しようとしている人のために:
{% for field in form.errors %}
{% for error in form.errors[field] %}
<div class="alert alert-error">
<strong>Error!</strong> {{error}}
</div>
{% endfor %}
{% endfor %}
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 %}
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 %}
お役に立てば幸いです。