如何将HTML <span>添加到SubmitField文本参数?

时间:2019-04-28 06:41:42

标签: flask flask-wtforms

我正在尝试在提交按钮文本中包含一个信封符号。

基本上我要生成的代码是

<button type="button" class="btn btn-primary"><span class="glyphicon glyphicon-envelope"></span> Envelope</button>

reference

但是我当然不能做

submit = SubmitField('<span class="glyphicon glyphicon-envelope"></span> Send')

执行此操作的最佳方法是什么?我正在尝试一些JavaScript代码,但是我认为这不是最好的主意。

谢谢

2 个答案:

答案 0 :(得分:2)

根据我对wtforms代码的阅读,通用的SubmitField呈现了一个如下所示的HTML元素:

<input type="submit" value="SOME TEXT LABEL">

之所以这样做是因为SubmitField具有签名(您可以跟踪继承以查看HTML生成代码):

class SubmitField(BooleanField):
    """
    Represents an ``<input type="submit">``.  This allows checking if a given
    submit button has been pressed.
    """
    widget = widgets.SubmitInput()

要根据需要输出HTML,您需要定义一个自定义窗口小部件。查找有关此内容的文档。

例如,像这样(未经测试)的东西可能会起作用:

class MySubmitWidget(widgets.SubmitInput): # note subclassing the original
    def __call__(self, field, **kwargs):  # but overriding the render
        return HTMLString('<button type="button" class="btn btn-primary"><span class="glyphicon glyphicon-envelope"></span> Envelope</button>')

class MySubmitField(SubmitField): # note subclassing the original
    widget = MySubmitWidget # but overriding the render widget

在您的表单中,您只需使用MySubmitField。如果要进一步自定义或使HTML动态化,则必须修改__call__()方法以生成响应kwargs的HTML。

请注意,<input type="submit">元素有一个特殊的默认操作是提交表单,当您呈现通用<button>时,它不会自动提交表单,因此您很可能必须解决该问题接下来的问题。

答案 1 :(得分:1)

尝试一下-

在表单定义中,在“提交”字段中提及此内容。

提交= SubmitField('✉')