Flask项目删除首个列表项时404错误求助(CS50课程项目)
问题排查方案
1. 核查前端ID传递逻辑
- 打开
list.html,检查首个问题对应的删除按钮/链接的ID参数生成代码。比如使用Jinja2渲染的<a href="/delete/{{ question.id }}">,要确认首个问题的question.id在模板渲染时被正确填充。可以临时在模板中添加{{ question.id }}直接显示,查看页面渲染后首个问题的ID是否存在。 - 检查循环渲染逻辑(如
{% for question in questions %}),确认首个元素的变量引用没有拼写错误或特殊处理导致ID未绑定。
2. 检查Flask路由的参数接收
- 查看
app.py中处理删除请求的路由(例如@app.route('/delete')或@app.route('/delete/<int:id>')),确认参数获取方式是否正确:- 若为GET请求,检查是否用
request.args.get('id')获取ID; - 若为POST请求,检查是否用
request.form.get('id')获取ID。
- 若为GET请求,检查是否用
- 在路由中添加打印语句(如
print("Received ID:", id)),确认首个删除请求的ID是否为None,以此验证前端是否正确传递参数。
3. 验证数据加载与数据库查询
- 检查从SQLite3加载问题列表的代码,确认查询语句(如
SELECT id, ... FROM questions)包含了ID字段,且查询结果中首个问题的ID值存在。 - 确认Python对象(如
question实例)的ID属性被正确赋值,避免因数据映射错误导致ID丢失。
4. 用浏览器工具抓包验证请求
- 按下F12打开浏览器开发者工具,切换到网络标签页,触发首个问题的删除操作,查看请求的URL或表单数据:
- 若为GET请求,检查URL中是否包含
?id=xxx参数; - 若为POST请求,查看表单数据中是否有
id字段及对应值。
- 若为GET请求,检查URL中是否包含
- 如果请求中没有ID参数,说明前端渲染或事件绑定存在问题,导致参数未被传递。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

