6

I want a submit button that displays an icon rather than text. The button is a field in a WTForms form. I am using Bootstrap and Open Iconic for styling and icons. How do I set the submit field to display an icon?

class MyForm(Form):
    submit = SubmitField('')
{{ form.submit }}

This post refers to an icon method, but I can't find any more information on it.

4

3 回答 3

7

您链接的示例使用 Flask-Bootstrap 提供的宏。宏使使用 Bootstrap 构建表单变得容易,但可能不够灵活。例如,他们可能不支持使用 Open Iconic 图标。

通常,您不需要在表单中指定提交按钮,因为它不会提供有用的数据。手动将提交呈现为模板中的按钮并设置您需要的任何内容。

<button type=submit class="btn btn-primary"><span class="oi oi-check" title="Submit"></span></button>

如果您SubmitField的表单中确实需要 a,您可以将标签设置为Markup带有 HTML 的字符串。Markup需要告诉 Jinja 在不逃逸的情况下渲染是安全的。

from markupsafe import Markup
submit_value = Markup('<span class="oi oi-check" title="Submit"></span>')
submit = SubmitField(submit_value)
于 2016-08-25T16:21:33.423 回答
1

我有一个类似的问题,所以,你可以这样做来使用 wtforms,并简单地调用{{ render_temple(form) }}html 来得到这个结果。

class InlineButtonWidget(object):
    def __init__(self, class_=None):
        self.class_ = class_

    def __call__(self, field, **kwargs):
        kwargs.setdefault('type', 'submit')
        kwargs["class"] = self.class_
        title = kwargs.pop('title', field.description or '')
        params = html_params(title=title, **kwargs)

        html = '<button %s>%s</button>'
        return HTMLString(html % (params, escape(field.label.text)))


class InlineButton(Field):
    widget = InlineButtonWidget()

    def __init__(self, label=None, validators=None, text='Save', **kwargs):
        super(InlineButton, self).__init__(label, validators, **kwargs)
        self.text = text

    def _value(self):
        if self.data:
            return u''.join(self.data)
        else:
            return u''

用法:

class BookForm(FlaskForm):
    text = Markup('<i class="fas fa-sign-in-alt"></i> Submit')
    submit = SubmitField(text, widget=InlineButtonWidget(class_="btn btn-info")) #This class_ param it's applied in the class of the button in HTML.

输出:

html代码

展示

我的回复是基于这篇文章WTForms created a custom widget

于 2020-06-01T02:28:09.693 回答
0

如果您想在您的 html 模板中使用图像图标而不是提交标签文本呈现提交字段您可以执行以下操作:

(假设您的表单字段名称是 isubmit):

<button type="submit" style="border: 0 none; background: none;" name="isubmit" value="x"><img src="/static/previousButton.png"></button>

注意: value 必须是非空的,但它是什么并不重要;只会显示 img。

于 2020-04-06T23:16:55.817 回答