在 wtforms SubmitField 中使用图标?

Use icon in wtforms SubmitField?

我知道这看起来像是这个 的副本,其中答案给出了两个解决方案。但这些解决方案对我不起作用。我正在尝试重写此 html 以使用 wtforms 呈现。我有一个 < i > 标签,在按钮标签内有一个很棒的字体图标:

        <button id="symbolBtn" class="mybtn btn btn-outline-secondary" type="submit"
            name="submit-button" value="search">
            <i class="fas fa-search"></i>
        </button>

类似问题的第一个解决方案建议使用标记来定义要用作值的 html - 对于此解决方案,我尝试这样做:

from markupsafe import Markup

BuyForm(FlaskForm):
    # The fields in question:
    search = StringField("Search", id="symbolInput", validators=[validSymbol])
    search_icon = Markup("<i class="fas fa-search"></i>")
    search_button = SubmitField(search_icon, id="symbolBtn")

    # Other fields in the same form
    shares = IntegerField("Shares", id="amountInput", validators=[validBuyAmount])
    shares_button = SubmitField("Refresh", id="amountBtn")
    submit_button = SubmitField("Buy")

我有多个 SubmitFields(提交按钮)并根据按下的 SubmitField 进行不同的验证。但图标未呈现 - html 字符串在按钮中呈现为文本。我可以看到引号是个问题,我尝试了不同的组合:

Markup('<i class="fas fa-search"></i>')
Markup("<i class='fas fa-search'></i>")
Markup("<i class=\"fas fa-search\"></i>")

等等...但是每次尝试都只是呈现文本。就像 html inspect 上的来源在哪里,例如:

value="<i class='fas fa-search'></i>"

我想这是合乎逻辑的,那么人们是如何让它发挥作用的呢?

类似问题中的第二个解决方案建议将其写成普通 html,但我需要检查从自定义 wtforms 验证器中按下了哪个按钮,例如 validSymbol(form, field) 我为此需要能够说:

if form.search_button.data:
    # Search button was pressed. Check if search field contains valid data.

我想做的是不可能的还是我只是错过了什么?

我不知道你是否想通了,标记也不适合我,但这就是我所做的。

在我的表单中,我制作了一个 class 和 submitfield

class FavoriteForm(FlaskForm):
    favorite = SubmitField('Favorite')

在我的路线中我做到了

if fav.validate_on_submit:
    if fav.data['favorite']: # If favorite comes back True
        #code
        return redirect(url_for('home'))

在我的 html 中我做到了

<form method="POST">
    {{ fav.hidden_tag() }}
    <button type="submit" name="favorite" value="x" class="follow-btn"><i class="fa fa-heart-o"> Favorite</i></button>
</form>

您的按钮必须有一个名称和一个值。 名称必须是您在表单中用于 SubmitField 的名称,值可以是您希望它不为空的任何名称。