要验证WTForms和Jinja中不存在的字段,可以使用自定义验证器和自定义过滤器。
以下是一种解决方法的示例代码:
- 创建一个自定义验证器来验证字段是否存在于WTForms中:
from wtforms.validators import ValidationError
class FieldExists(object):
def __init__(self, message=None):
if not message:
message = 'Field does not exist in WTForms.'
self.message = message
def __call__(self, form, field):
if field.name not in form._fields:
raise ValidationError(self.message)
- 在表单类中使用自定义验证器来验证字段:
from wtforms import Form, StringField
from wtforms.validators import InputRequired
from your_module import FieldExists
class MyForm(Form):
field1 = StringField('Field 1', validators=[InputRequired(), FieldExists()])
field2 = StringField('Field 2', validators=[InputRequired(), FieldExists()])
- 在Jinja模板中使用自定义过滤器来判断字段是否存在:
from jinja2 import Environment
env = Environment()
def field_exists(form, field_name):
return field_name in form._fields
env.filters['field_exists'] = field_exists
- 在Jinja模板中使用自定义过滤器判断字段是否存在:
{% if form|field_exists('field1') %}
<p>Field 1 exists in the form.</p>
{% else %}
<p>Field 1 does not exist in the form.</p>
{% endif %}
通过使用自定义验证器和自定义过滤器,您可以验证WTForms中是否存在字段,并在Jinja模板中进行相应的判断和处理。