Flask/Jinja中如何显示已选中的下拉选项?
解决Flask更新页面下拉框默认选中问题
修改模板下拉框代码
在循环生成<option>标签时,增加判断逻辑:如果当前dojo的ID和要更新的ninja所属的dojo_id一致,就给该选项添加selected属性,浏览器会自动选中这个选项。
修改后的代码:
<select class="form-select" name="dojo_id"> {% for dojo in dojos %} <option value="{{ dojo.id }}" {% if dojo.id == ninja.dojo_id %}selected{% endif %}> {{ dojo.name }} </option> {% endfor %} </select>
修复路由中的重定向语法错误
你的更新路由里的重定向代码存在语法问题,f-string中直接写request.form['dojo_id']会被当成字符串字面量,无法正确获取表单值,建议改成:
@app.route('/update/ninja', methods=['POST']) def update_ninja_form(): ninja.Ninja.update_one(request.form) return redirect(f"/view/dojo/{request.form.get('dojo_id')}")
用request.form.get()还能避免表单中没有dojo_id时抛出KeyError的问题。
原理说明
你已经在路由中把要更新的ninja对象传入了模板,所以可以直接在Jinja2模板中访问ninja.dojo_id属性,通过循环对比每个dojo的ID,给匹配的选项加上selected属性,就能实现默认选中用户创建时的选项。
内容的提问来源于stack exchange,提问作者culiano
相关产品推荐
相关产品推荐

