Отключить автоматическое экранирование в WTForms SelectField

#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 )