Flask基于Python列表生成下拉列表无选项如何解决?
问题错误原因及修复方案
核心错误点
- 同一路由
/的GET请求绑定了两个视图函数,Flask路由匹配遵循先定义优先规则,请求会命中第一个main_page函数,该函数没有给模板传递pools变量,模板中pools为空值,自然遍历不出任何选项。 - HTML语法错误:
method和action是<form>标签的专属属性,不应该写在<select>标签上,虽然该错误不直接导致无选项,但会影响后续表单提交逻辑。 - 冗余代码问题:所有
<option>都加了SELECTED属性,会导致默认永远选中最后一个选项;</option>后多余的双引号也属于无效冗余代码。
修复代码
服务端代码修正
直接合并重复的路由定义即可:
from flask import Flask, render_template from data_harvester import api_requests app = Flask(__name__) @app.route('/', methods=['GET']) def dropdown(): pools = ['test1', 'test2'] return render_template('index.html', pools=pools) if __name__ == '__main__': app.run(debug=True)
如果需要保留原来的函数命名,删掉第二个路由定义,把pools参数放到第一个main_page函数返回中也可正常运行。
前端模板代码修正
<div> <select name="pools"> {% for pool in pools %} <option value="{{pool}}">{{pool}}</option> {% endfor %} </select> </div>
如果需要设置默认选中第一个选项,可以在option标签内添加判断{% if loop.first %} selected{% endif %}。
内容的提问来源于stack exchange,提问作者wiktor
相关产品推荐
相关产品推荐

