我正在使用Flask和Bootstrap,我需要创建一个没有标签的字段,因为我将把它作为占位符放置,这样可以节省UI中的空间,因为该字段会出现多次。
我不需要标签字段,只需要用户输入信息的实际字段。
{{ wtf.form_field(field) }}
我不需要标签字段,只需要用户输入信息的实际字段。
{{ wtf.form_field(field) }}
可能有点晚了,但我觉得最简单的方法是使用CSS将标签的可见性设置为None。
.control-label {
display: none;
上述CSS将使所有标签不可见。这可能对于每个标签都不是理想的,但如果为特定的WTF表单字段(或确实将其分组的更高元素)添加“no-label”类,则以下CSS将不会显示这些字段的标签:
.no-label .control-label {
display: none;
}
wtform
对象,您完全可以创建自己的定制宏,基于现有的宏进行修改,做到与原有宏完全相同,只是不会渲染.label
。custom_wtf.html
模板文件中,并将该宏重命名为“wtf_nolabel”,然后根据我的需要进行调整。{%- if form_type == "inline" %}
{{field.label(class="sr-only")|safe}}
{% if field.type == 'FileField' %}
{{field(**kwargs)|safe}}
{% else %}
我可以删除 {{ field.label(class="sr-only")|safe }}
这行代码,这样就可以让内联元素正常工作。继续往下看,我需要删除第97-99行来调整水平渲染选项,因为当前的选项是:
{{field.label(class="control-label " + (
" col-%s-%s" % horizontal_columns[0:2]
))|safe}}
如果您不想按照@Doobeh所概述的方式编辑模板宏,并且不想显示任何字段标签,则可以使用以下技术。
创建一个名为“无标签”(No Label)的混合类,将所有表单字段的标签属性设置为None
。
class NoLabelMixin(object):
def __init__(self, *args, **kwargs):
super(NoLabelMixin, self).__init__(*args, **kwargs)
for field_name in self._fields:
field_property = getattr(self, field_name)
field_property.label = None
class MyForm(Form):
first_name = StringField(u'First Name', validators=[validators.input_required()])
last_name = StringField(u'Last Name', validators=[validators.optional()])
class MyNoLabelForm(NoLabelMixin, MyForm):
pass
my_no_label_form = MyNoLabelForm()
{{ render_field(form.phone, form_type="inline", class="form-control", placeholder="Phone number")}}
<div class="form-group required">
<label class="sr-only" for="phone">Phone</label>
<input class="form-control" id="phone" name="phone" placeholder="Phone Number" required="" type="text" value="">
</div>
在模板文件中加入以上内容后,所有标签都会被隐藏,页面会变得更加简洁。
{% block styles %}
{{super()}}
<style>
.control-label {display: none;}
</style>
{% endblock %}
在Python中创建Form类时,可以将标签设置为空字符串。
class form_field(Form):
field = StringField( label='')
我知道这有点晚了,但我和 OP 一样遇到了同样的问题,我只想要字段(没有标签)。在 WTForms==2.3.3 和 Flask==1.1.2 中,只需访问内部字段即可。
{% for field in form.cities %}
{{ wtf.form_field(field.city)}}
{% endfor %}
不要创建新的宏和新的类
1)编写了一个CSS样式,隐藏页面开头的标签,使其不显示
<style>
.my_div_class label{
visibility: hidden;
}
</style>
2) 一个在 document.ready 中运行的 JavaScript,用于删除我想要的 div 下面所有标签。
var all = hold.getElementsByTagName("LABEL");
for (var i=0; i < all.length; i++){
var parent = all[i].parentElement;
parent.removeChild(all[i])
}
}
可能不是最佳实践,但很容易做到并且速度很快,因为它很简单,所以发布它,我可能需要稍后记住它,并且不需要深入了解Bootstrap和Flask表单。希望有帮助。
更加简单!
<style>
label{
display: None;
}
</style>
这太简单了