Flask路由报错:dashboard_add()收到意外参数job_id求助
Flask路由参数错误:
dashboard_add() got an unexpected argument 'job_id' 问题场景
我要在Flask里实现两个操作:
- 展示特定ID对应的jobs表详情(GET请求)
- 点击Apply按钮后向dashboard表插入记录(POST请求)
特意给同一路由/jobs/<job_id>绑定了两个不同函数,但终端报错:
dashboard_add() got an unexpected argument 'job_id'
相关代码
Python后端代码
@app.route('/jobs/<job_id>') def job_detailed_view(job_id): detailed_view = fetch_specific(job_id) return render_template('detailed-view.html', job=detailed_view) def fetch_specific(job_id): query = """ SELECT * FROM jobs WHERE job_id = %(job_id)s """ return execute_select(query, {'job_id': job_id}, False) @app.route('/jobs/<job_id>', methods=['POST']) def dashboard_add(): apply_date = datetime.now() apply_date.strftime("%d/%m/%y") applied_job_id = int(request.form.get('add_item_index', 0)) apply_job(applied_job_id, apply_date) return redirect('home') def apply_job(job_id, apply_date): execute_insert (""" INSERT INTO dashboard (job_id, apply_date) VALUES (%(job_id)s, %(apply_date)s) """, {'job_id': job_id, 'apply_date': apply_date})
HTML前端代码
<div class="job-title"> <a href="{{ "/jobs/" + (job['job_id']|string) }}">{{job['job_title']}}</a> </div> <form method="post" action="{{ "/jobs/" + (job['job_id']|string)}}"> <input type="hidden" name="add_item_index" value="3"> <button class="apply" type="submit" name="add_item"> Apply </button> </form>
问题原因
你的POST路由/jobs/<job_id>定义了URL路径参数job_id,但对应的处理函数dashboard_add()没有声明接收这个参数。Flask会自动把URL中匹配到的参数传递给视图函数,当POST请求过来时,Flask试图把job_id传给dashboard_add(),但函数没定义这个参数,就会触发错误。
修复方案
1. 修改POST视图函数,添加参数接收
@app.route('/jobs/<job_id>', methods=['POST']) def dashboard_add(job_id): # 修正日期格式化:strftime返回新字符串,需要赋值给变量 apply_date = datetime.now().strftime("%d/%m/%y") # 直接用URL里的job_id,不用依赖表单硬编码值 apply_job(int(job_id), apply_date) return redirect('home')
2. 优化表单,移除无用的硬编码隐藏域
<div class="job-title"> <a href="{{ "/jobs/" + (job['job_id']|string) }}">{{job['job_title']}}</a> </div> <form method="post" action="{{ "/jobs/" + (job['job_id']|string)}}"> <!-- 移除硬编码的隐藏域,直接使用URL中的job_id --> <button class="apply" type="submit" name="add_item"> Apply </button> </form>
额外提示
- 原代码中
apply_date.strftime("%d/%m/%y")只是生成了格式化字符串,但没有赋值回apply_date,导致插入数据库的还是原始datetime对象,可能不符合数据库字段的格式要求,改成链式调用datetime.now().strftime("%d/%m/%y")更合理。 - 表单里的
add_item_index硬编码为3,逻辑上不合理,使用URL中的job_id能保证数据一致性,避免前端值错误导致的问题。
内容的提问来源于stack exchange,提问作者Karola-ING
相关产品推荐
相关产品推荐

