Вопрос
Возможно ли, чтобы некоторые из новых атрибутов использовались только в HTML5 внутри WTForms?
Например, предположим, что вы хотите создать TextField с обязательным атрибутом placeholder="foo" и атрибутами autofocus.Как это сделать в WTForms?
В html это будет выглядеть так: <input maxlength="256" name="q" value="" placeholder="foo" autofocus required>
Обратите внимание, что placeholder="foo"
легко сделать в WTForms.autofocus
и required
, поскольку они не имеют значения,... ну, насколько я видел, не поддерживаются в WTForms.
Может ли WTForms это поддерживать?
Решение
Возможно, вам потребуется создать собственный виджет.
Обратите внимание на документы по пользовательским виджетам.
Другие советы
В WTForms 1.0, выпущенном вчера, компактный синтаксис HTML5 теперь используется по умолчанию.Теперь вы можете сделать (в дзиндзя):
{{ form.field(autofocus=true, required=true, placeholder="foo") }}
Обратите внимание, что в Jinja литерал равен true
вместо True
, но если вы попробуете это в консоли Python, вам нужно будет использовать литерал Python True
, чтобы это работало.
В WTForms 0.6.x, который использовал XHTML в качестве вывода по умолчанию, вы могли бы сделать, например
{{ form.field(autofocus="autofocus", required="required", placeholder="foo" }}
Это рекомендуемый способ представления логических атрибутов в XHTML, и он по-прежнему является 100% действительным HTML5 и полностью эквивалентен, хотя сгенерированный HTML немного более подробный.
Я новичок в WTForms, но мне кажется, что решение можно улучшить вместо использования:
{{ form.field(autofocus=true, required=true, placeholder="foo") }}
использовать :
{% if field.flags.required %}
{{ field(autofocus=true, required=field.flags.required, placeholder="foo") }}
{% else %}
{{ field(autofocus=true, placeholder="foo") }}
{% endif %}
WTForms, похоже, неправильно обрабатывает required=false
для 100% HTML5 и устанавливает в HTML атрибут required="False"
вместо удаления атрибута.Можно ли это улучшить в следующей версии WTForms?