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

如何解决Flask中TypeError: home()缺失必需位置参数'usr'的错误

解决Flask中TypeError: home() missing 1 required positional argument: 'usr'的问题

这个错误的根源是Flask没办法给你的home()函数传递它必需的usr参数,主要有两个地方需要修正:

1. 路由定义缺少URL参数占位符

你的/home路由没有在URL路径里定义参数位置,Flask不知道从哪里获取usr的值传递给函数。你需要在路由中添加<usr>作为参数占位符,这样Flask会自动把URL中对应位置的内容作为usr参数传给home()函数。

2. Redirect时参数值写错了

在login函数的POST处理分支里,你写的是redirect(url_for("home", usr="user"))——这里的"user"是固定字符串,不是你从表单里获取到的用户输入变量user。就算路由修好了,传过去的也只是文本"user",而不是实际的用户名。

另外,你的原代码缩进有问题(Python对缩进很严格),我也一起修正了。下面是完整的修复后代码:

@app.route("/", methods=["POST", "GET"])
def login():    
    if request.method == "POST":        
        user = request.form["name"]        
        # 把"user"改成变量user,传递实际用户名
        return redirect(url_for("home", usr=user))    
    else:        
        return render_template("login.html")

# 在路由中添加<usr>占位符,接收URL参数
@app.route("/home/<usr>", methods=["POST", "GET"])
def home(usr):    
    # return render_template("home.html")    
    return f"<h1>{usr}</h1>"

@app.route("/report")
def report():    
    return render_template("report.html")

@app.route("/register")
def register():    
    return render_template("register.html")

if __name__ == "__main__":    
    app.run(debug=True)

最后别忘了确保你的login.html表单里有一个name属性为name的输入框,这样才能正确获取用户输入:

<form method="POST">
    <input type="text" name="name" placeholder="输入用户名">
    <button type="submit">登录</button>
</form>

这样修改后,用户提交表单后会跳转到/home/[用户名]的路径,home()函数也能正确接收到usr参数,不会再出现那个TypeError了。

内容的提问来源于stack exchange,提问作者Cedric Dsouza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:57:41