如何在Flask中获取点击按钮对应的course.id值
获取点击按钮对应course.id的解决方案
你的代码核心问题是表单提交的键值不匹配:HTML里按钮的name被设为动态的课程ID,但后端却在查找固定键name,导致无法正确获取目标值。以下是两种可行的修复方案:
方案1:固定按钮name,用value传递course.id(推荐)
这种方式更直观,也能避免遍历所有课程的冗余操作。
修改HTML代码:
{% for course in courses %} <hr class="border border-primary"> <form action="/search" method="post"> <!-- 固定name为course_id,value绑定课程ID --> <button type="submit" name="course_id" value="{{course.id}}"> Favorite </button> </form> <h2>{{ course.name }}</h2> {% endfor %} {% endblock %}
修改后端Python代码:
elif request.method == "POST": # 直接获取表单中固定键course_id的值 course_id = request.form.get('course_id') if course_id: # 无需遍历所有课程,直接插入数据库 db.execute("INSERT INTO favorite_courses(user_id, course_id) VALUES (?, ?);", session['user_id'], course_id) return redirect("/")
方案2:保留原按钮name,通过遍历表单键获取course.id
如果不想修改HTML结构,可以通过遍历表单提交的键来找到课程ID(因为按钮的name就是course.id):
修改后端Python代码:
elif request.method == "POST": course_id = None # 遍历表单所有键,找到对应的课程ID(假设course.id是数字类型) for key in request.form.keys(): if key.isdigit(): course_id = key break if course_id: db.execute("INSERT INTO favorite_courses(user_id, course_id) VALUES (?, ?);", session['user_id'], course_id) return redirect("/")
方案1逻辑更清晰,性能也更好,建议优先采用。
内容的提问来源于stack exchange,提问作者João Vitor Barros Collet
相关产品推荐
相关产品推荐

