Python:WTForms当我初始化一个字段时,我可以添加一个占位符属性吗?

我想添加一个占位符属性到WTForms中的字段。 我该怎么做?

abc = TextField('abc', validators=[Required(), Length(min=3, max=30)], placeholder="test") 

以上代码无效

我如何添加一个占位符属性值?

更新为WTForms 2.1

您现在可以从WTForms 2.1(2015年12月)中通过使用render_kw=参数设置字段构造函数来设置呈现关键字。

所以这个领域看起来像:

 abc = StringField('abc', [InputRequired()], render_kw={"placeholder": "test"}) 

请注意,这是可能的; 它开始桥接代码和表示之间的界限; 所以明智地使用它!


(旧的答案,对于早于WTForms 2.1的版本,仍然如此)

WTforms 2.0.x及以下版本的Python构造函数不支持placeholder

但是,您可以在模板中轻松完成此操作:

 {{ form.abc(placeholder="test") }} 

正确答案如下:

 abc = TextField('abc', validators=[Required(), Length(min=3, max=30)], description="test") 

正如一个人可以阅读文件:

 description – A description for the field, typically used for help text. 

然后在您的模板中:

 {% import 'forms.html' as forms %} {% for field in form %} {{ forms.render_field(field) }} {% endfor %} 

render_field是一个在forms.html中定义的macros:

 {% macro render_field(field) -%} {% if field.type == 'CSRFTokenField' %} {{ field }} {% if field.errors %} <div class="warning">You have submitted an invalid CSRF token</div> {% endif %} {% elif field.type == 'HiddenField' %} {{ field }} {# any other special case you may need #} {% else %} <div class="form-group"> <label for="{{ field.label.field_id }}" class="col-sm-2 control-label">{{ field.label.text }}</label> <div class="col-sm-10"> {{ field(placeholder=field.description) }} {% if field.errors %} <div class="alert alert-danger" role="alert"> {% for err in field.errors %} <p>{{ err|e }}</p> {% endfor %} </div> {% endif %} </div> </div> {% endif %} {%- endmacro %} 

我的解决scheme是使用自定义小部件:

 from flask.ext.wtf import Form from wtforms import StringField, validators from wtforms.widgets import Input class CustomInput(Input): input_type = None def __init__(self, input_type=None, **kwargs): self.params = kwargs super(CustomInput, self).__init__(input_type=input_type) def __call__(self, field, **kwargs): for param, value in self.params.iteritems(): kwargs.setdefault(param, value) return super(CustomInput, self).__call__(field, **kwargs) class CustomTextInput(CustomInput): input_type = 'text' class EditProfileForm(Form): first_name = StringField('First name', validators=[validators.DataRequired()], widget=CustomTextInput(placeholder='Enter first name')) 

也许这不是很好,但它允许使用Flask-Bootstrap并在表单代码中定义表单,而不是在模板中