Как добавить HTML <span>к текстовому аргументу SubmitField? - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь включить символ конверта в текст кнопки отправки.

В основном код, который я хочу сгенерировать:

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

ссылка

Но, конечно, я не могу сделать

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

Каков наилучший подход для этого? Я пытаюсь использовать JavaScript-код, но думаю, что это не самая лучшая идея.

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 апреля 2019

Из моего прочтения кода 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__(), чтобы генерировать HTML, реагирующий на kwargs.

Обратите внимание, однако, что элементы <input type="submit"> имеют определенное действие по умолчанию, которое заключается в отправке формы, когда вы генерируете универсальный <button>, он не будет автоматически отправлять вашу форму, поэтому вам, скорее всего, придется решать эту проблему дальше.

1 голос
/ 28 апреля 2019

Попробуйте это -

В определении формы укажите это для поля отправки.

submit = SubmitField ('✉')

...