如何在jinja2中获取WTForms Validator

Hol*_*son 1 python jinja2 flask wtforms flask-wtforms

我想要做的是检查表单对象具有哪种类型的表单验证器,以便我可以基于这些属性呈现字段.例如,如果表单具有最大长度验证,则将max-length属性添加到html表单.

我在想它的工作方式是这样的:

zip_code = TextField('Zip Code', [validators.Length(min=5, max=11)])
Run Code Online (Sandbox Code Playgroud)

将会像这样进入Jinja2宏:

{% if field.valdator "has max length" %}
  {% set class = class + ' maxlength="11" ' %}
{% endif %}
{{ field(class=class, **kwargs) }}
Run Code Online (Sandbox Code Playgroud)

met*_*irr 5

{{ form.field.validators }} 返回一个列表,因此您可以通过索引值获取验证器.

class ZipCodeForm(Form):
    zip_code = StringField("Zip Code", [validators.Length(3,45)])

def register():
    form = ZipCodeForm()
    return render_template('register.html', form=form)

# register.html
...
 {% macro textfield(type=text, max=20) %}
     <input type={{type}}, size={{max}} >
 {% endmacro %}

 {% if form.zip_code.validators[0]["max"] %}
     textfield(max=60)
 {% endif %}
Run Code Online (Sandbox Code Playgroud)