在带有Bootstrap-Flask扩展的 Flask 应用程序中,当表单的 HTML 使用自动呈现时,如何使用 WTForms 的render_kwrender_form()
类参数覆盖默认样式?[*]
我定义了这个简单的表单,它提供了一个确认删除数据库记录的按钮,我希望该按钮为红色而不是标准的灰色:
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 类来以红色而不是灰色显示按钮。WTForms 定义“将在渲染时提供给小部件的关键字”的方式是将它们作为 dict 传递给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"
?
额外的信息
看看WTFormsrender_kw
是如何处理的,似乎应该覆盖这些值(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 的Bootstrap-Flask 等价物quick_form()
。