You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:57:43