【发布时间】:2020-05-22 10:38:22
【问题描述】:
在带有Bootstrap-Flask 扩展名的Flask 应用程序中,当表单的HTML 使用render_form() 自动呈现时,如何使用WTForms 的render_kw 类参数覆盖默认样式? [*]
我定义了一个简单的表单,它提供了一个确认删除数据库记录的按钮,我希望该按钮是红色而不是标准的灰色:
class DeleteMappingForm(FlaskForm):
submit = SubmitField(_l('Delete mapping'))
自动生成的 HTML(仅关注 <input> 元素)是:
<input class="btn btn-secondary btn-md" id="submit" name="submit" type="submit" value="Delete mapping">
我想使用btn-alert 而不是默认的btn-secondary Bootstrap class 以红色而不是灰色显示按钮。
WTForms 定义“在渲染时将提供给小部件的关键字”的方法是将它们作为字典传递给render_kw。这可以很好地添加新关键字,但它不会替换现有的,我尝试这样做:
class DeleteMappingForm(FlaskForm):
submit = SubmitField(_l('Delete mapping'), render_kw={'class':'btn btn-alert btn-md'})
最终将我定义的 CSS 类添加到预定义的 CSS 类列表中,最终得到以下 HTML:
<input class="btn btn-secondary btn-md btn btn-alert btn-md" id="submit" name="submit" type="submit" value="Delete mapping">
有没有办法让通过render_kw 传递的值覆盖默认类,并且只有class="btn btn-alert btn-md"?
额外信息
看看render_kw 是如何被 WTForms 的 handled 覆盖的,似乎值应该被覆盖(dict 被连接起来,它覆盖了相同的键,例如:
>>> a={"class":"abc", "other":"aaa"}
>>> a
{'class': 'abc', 'other': 'aaa'}
>>> b={"class":"def", "other":"aaa"}
>>> b
{'class': 'def', 'other': 'aaa'}
>>> dict(a, **b)
{'class': 'def', 'other': 'aaa'}
在Bootstrap-Flask 对render_form() 的处理中我也无法确定其来源...
[*] 我使用的是Bootstrap-Flask 扩展而不是原来的 Flask-Bootstrap,因为后者不支持 Bootstrap 4+。 render_form() 是 Flask-Bootstrap 的 quick_form() 的 Bootstrap-Flask equivalent。
【问题讨论】:
标签: flask-wtforms wtforms bootstrap-flask