#flask #wtforms #flask-wtforms
#flask #wtforms #flask-wtforms
Вопрос:
Я пытаюсь показать дополнительный элемент html в списке вариантов a SelectField
из WTForms:
languages = [('en', '<i class="en flag">English'),
('de', '<i class="de flag">Deutsch')]
pref_language = SelectField(choices=languages)
Теги html всегда экранируются автоматически, даже если они завернуты в HTMLString(...)
:
<option value="en">amp;<i class="en flag"amp;>English</option>
<option value="de">amp;<i class="de flag"amp;>Deutsch</option>
Обновить:
Я сузил проблему до этой строки в WTForms:
return HTMLString('<option %s>%s</option>' % (html_params(**options), escape(text_type(label), quote=False)))
К сожалению, я не вижу способа исправить это извне.
Комментарии:
1. Вы можете попробовать добавить пользовательский виджет в SelectField ( wtforms.simplecodes.com/docs/0.6/widgets.html#custom-widgets )
2. В моем понимании вызов escape-метода немного слишком глубок, чтобы просто обойти его с помощью пользовательского виджета. Я только что открыл новую проблему на GitHub ( github.com/wtforms/wtforms/issues/301 )
3.Это Jinja / itsdangerous, который избегает HTML. Вы должны использовать разметку Jinja, чтобы пометить этот html как
|safe
ссылку на документы4. На самом деле это не так. Я «исправил» это в своей вилке и запросил извлечение. ( github.com/wtforms/wtforms/pull/302 )