如何在Jinja2模板中为SelectField设置默认选中选项?
解决方法
方案1:修改Jinja2宏,通过字段data属性设置默认值
Flask-WTF的SelectField选中状态由字段自身的data属性控制,而非渲染时传入的HTML属性。修改宏,先给字段赋值data再渲染:
{% macro render_sfield(classParent, fieldGiven, classField="", icono="", id="", default="") -%} {% if default %} {% set _ = fieldGiven.data = default %} {% endif %} <div class="input-field {{classParent}}"> <i class="material-icons prefix">{{icono}}</i> {{ fieldGiven(class="validate " + classField, id=id) }} <label for="{{id}}">{{ fieldGiven.label.text }}</label> </div> {%- endmacro %}
这里用{% set _ = fieldGiven.data = default %}完成赋值,下划线是占位符避免Jinja2的未使用变量警告。
方案2:后端实例化表单时直接设置默认值
如果不想修改模板,可在后端创建表单实例时,直接给turno字段传入默认值:
# 假设datos是从数据库/接口获取的对象 if datos: persona_form = PersonaForm(turno=datos.turno) else: persona_form = PersonaForm()
这样模板里直接调用宏,字段会自动选中对应选项,无需再传default参数。
为什么之前的方法无效?
Flask-WTF的字段渲染逻辑会优先使用自身维护的状态(即data属性),你传入的selected、default、value等HTML属性会被覆盖。当字段未设置data时,才会默认选中定义中的第一个选项。
内容的提问来源于stack exchange,提问作者Fernando de Jesús Trejo
相关产品推荐
相关产品推荐

