首页 > 解决方案 > 验证 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>

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

先感谢您。

标签: flaskjinja2wtformsvalidationerror

解决方案


所以我有了想法,验证 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 %}

推荐阅读