繁体   English   中英

无法为端点构建 url

[英]Could not build url for endpoint

我正在尝试创建一个登录页面,将用户名发送到它重定向到的方法。

@app.route ("/login/", methods=["POST","GET"])
def login ():
    if request.method=="POST":
        name = request.form.get ("fname")
        user = Users.query.filter_by(first_name=name).first ()
        name=name.lower ()
        print (name)

        return redirect(url_for("fav_club", username=name))

    return render_template("login.html")

@app.route ("/favclub/<username>", methods=["POST","GET"])
def fav_club (username):
    if request.method == "POST":
        club = Club.query.filter_by(code=request.form.get ("fccode")).first ()
        club.fav_counter += 1
        user = Users.query.filter_by(first_name=request.form.get(username)).first()
        fav = Favorites(favorite=club, users=user)
        db.session.commit()
        return "Added Favorite!"
    else:
        return render_template("favorites.html")

我收到以下错误: werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'fav_club'. Did you forget to specify values ['username']? werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'fav_club'. Did you forget to specify values ['username']?

每次我尝试使用动态路由时,都会出现这样的错误。 我认为这不是 HTML 问题,但它们是:

登录.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login!</title>
</head>
<body>
    <form action="{{ url_for('login') }}" method="post">
        <label for="firstname">First Name:</label>
        <input type="text" id="firstname" name="fname" placeholder="firstname">
        <button type="submit">Submit</button>
    </form>
</body>
</html>

收藏夹.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Find a Club!</title>
</head>
<body>
    <form action="{{ url_for('fav_club') }}" method="post">
        <label for="club">Favorite Club Code:</label>
        <input type="text" id="club" name="fccode" placeholder="favclubcode">
        <button type="submit">Submit</button>
    </form>
</body>
</html>

在 fav_club 视图中,您将“用户名”参数指定为 URL 的一部分。 但是,收藏夹中的url_for('fav_club')生成的 URL 不包含用户名。

最好从 URL 中完全删除“用户名”字段。 这样您就不必在从 GET 请求呈现页面时提供它,并且您可以在将表单作为 POST 请求提交时从表单数据中提供它。 (实际上,您已经将处理表单数据的代码添加到 fav_code 视图中。)

@app.route("/login", methods=["POST","GET"])
def login():
    if request.method=="POST":
        name = request.form.get("fname")
        user = Users.query.filter_by(first_name=name).first ()
        name=name.lower()
        return redirect(url_for("fav_club"))

return render_template("login.html")

@app.route("/favclub", methods=["POST","GET"])
def fav_club():
    if request.method == "POST":
        club = Club.query.filter_by(code=request.form.get ("fccode")).first ()
        club.fav_counter += 1
        user = Users.query.filter_by(first_name=request.form.get(username)).first()
        fav = Favorites(favorite=club, users=user)
        db.session.commit()
        return "Added Favorite!"
    else:
        return render_template("favorites.html")

收藏夹。html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Find a Club!</title>
</head>
<body>
    <form action="{{ url_for('fav_club') }}" method="post">
        <label for="club">Favorite Club Code:</label>
        <input type="text" id="club" name="fccode" placeholder="favclubcode">
        <input type="test" id="username" name="username" placeholder="Username">
        <button type="submit">Submit</button>
    </form>
</body>
</html>

这将解决您的错误,但登录页面无效 - 您可以直接跳到 /favclub 页面,并提供您喜欢的任何用户名。 要使登录正常工作,您需要使用会话。 例如,请参阅本教程,了解如何做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM