【问题标题】:Validate non-existing field in WTForms and Jinja验证 WTForms 和 Jinja 中不存在的字段
【发布时间】:2019-11-07 16:32:21
【问题描述】:

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

我正在使用 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>

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

提前谢谢你。

【问题讨论】:

    标签: flask jinja2 wtforms validationerror


    【解决方案1】:

    只需将错误附加到字段中:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-01-20
        • 2023-03-16
        • 2018-02-24
        • 2016-06-16
        • 1970-01-01
        • 2011-05-02
        • 2019-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多