我想在WTForms中的字段中添加占位符属性。我该怎么办?
abc = TextField('abc', validators=[Required(), Length(min=3, max=30)], placeholder="test")
以上代码无效
如何添加带有值的占位符属性?
答案 0 :(得分:100)
更新了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") }}
答案 1 :(得分:7)
正确答案如下:
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中定义的宏:
{% 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 %}
答案 2 :(得分:2)
extension UIViewController {
class func loadFromNib<T: UIViewController>() -> T {
return T(nibName: String(describing: self), bundle: nil)
}
}
let vc : Test3 = Test3.loadFromNib()
navigationController.pushViewController(vc, animated: animated)
答案 3 :(得分:1)
我的解决方案是使用自定义小部件:
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并在表单代码中定义表单,而不是在模板中