验证WTForms和Jinja中不存在的字段



经过长时间的搜索,没有答案,我不得不向您寻求帮助。

我使用WTForms在Flask开发应用程序。

我试图验证表单,但我没有验证特定的字段。在每一个教程或文档中,我都发现了如何在Jinja 中捕捉验证错误

{%if form.field.errors%}等等…

如果我没有特定的字段,如何捕捉验证错误?如何捕捉Jinja中的一般错误?

这是我的表格和模板:

forms.py
class VacationForm(FlaskForm):
vac_start = DateField('Start Vacation', validators=[DataRequired()])
vac_end = DateField('End Vacation', validators=[DataRequired()])
half_day = BooleanField('Half Day')
submit = SubmitField('Submit')
def validate(self):
start = self.vac_start.data
end = self.vac_end.data
if start > end:
raise ValidationError('error')
template.html
<form method="POST" action="">
{{ form.hidden_tag() }}
{{ form.vac_start(class='form-control col-6',type='date') }}
{{ form.vac_end(class='form-control col-6',type='date') }}
{{ form.half_day }}
{{ form.submit }}
</form>

我总是看到错误页面,但我想在提交按钮或日期字段下的某个地方输出错误。我相信我在做一些简单的事情,但我就是想不通。

提前谢谢。

只需将错误附加到字段:

self.submit.errors.append("My message")
return False

不要引发ValidationError-在验证错误的情况下简单地返回False(否则返回True(。

所以我有了一个想法,验证vac_end字段,它以某种方式工作:D

这是代码。

vac_start = DateField('Start Vacation', validators=[DataRequired()])
vac_end = DateField('End Vacation', validators=[DataRequired()])
half_day = BooleanField('Half Day')
submit = SubmitField('Submit')
def validate_vac_end(self, vac_end):
if self.vac_start.data > vac_end.data:
raise ValidationError('Wrong dates')

{% if form.vac_end.errors %}
{% for error in form.vac_end.errors %}
{{ error }}
{% endfor %}
{% endif %}

最新更新