【发布时间】:2021-11-04 22:43:34
【问题描述】:
我无法将我的网址重定向到另一条路线。
我想重定向到 /success,但它没有到达那里。
app.route("/success") 中的 print 语句永远不会实现,它永远不会返回任何内容。
我尝试了很多错误处理,但无法找出问题所在。
application.py
app = Flask(__name__)
REGISTRANTS = {}
SPORT=["Cricket", "Football", "Badminton", "Kho-Kho", "Kabaddi"]
@app.route("/", methods = ["GET", "POST"])
def index():
if request.method == "GET":
return render_template("index.html", sports = SPORT)
name = request.form.get("name")
sport = request.form.get("sport")
if not name:
return render_template("failure.html", message="Name not entered")
if not sport:
return render_template("failure.html", message="Sport not selected")
if sport not in SPORT:
return render_template("failure.html", message="Sport not in list. Don't try to hack our website.")
if request.method == "POST":
REGISTRANTS[name]=sport
print("yes")
return redirect("/success")
@app.route("/success", methods=["POST"])
def success():
print("Please work")
return render_template("success.html", registrants = REGISTRANTS)
index.html
{% extends "layout.html" %}
{% block body %}
<h1 style="text-align:center;">Register</h1>
<form action="/" method="post">
<input name="name" type="text" autocomplete="off" autofocus placeholder="Name">
<select name="sport">
<option value="" disabled selected>Sport</option>
{% for sport in sports %}
<option value="{{sport}}">{{sport}}</option>
{% endfor %}
</select>
<input type = "submit" value="Register">
</form>
{% endblock %}
layout.html
<html lang="en">
<head>
<meta name ="viewport" content = "initial-scale=1", width="device-width">
<title>hello</title>
</head>
<body>
{% block body %}{% endblock %}
</body>
</html>
success.html
{% block body %}
hello, {{name}}. Thanks for Registering for {{sport}}!
<h1>Registrants</h1>
<table style="border: 2px solid black">
<thead>
<tr style="border: 2px solid black">
<th style="border: 2px solid black">Name</th>
<th style="border: 2px solid black">Sport</th>
</tr>
</thead>
<tbody>
{% for name in registrants %}
<tr style="border: 2px solid black">
<td style="border: 2px solid black">{{name}}</td>
<td style="border: 2px solid black">{{registrants[name]}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
我是 Flask 的新手。请指导我。
【问题讨论】:
-
为什么路由成功的请求方法是POST?我认为如果您在这里使用 GET 方法,它应该可以工作。
-
@Detlef 我做了更改,但它不会重定向。它停留在索引页面上
-
您可以使用:
return redirect(url_for("success"))而不是:return redirect("/success"),其中 url_for 使用在装饰器中定义的成功例程的路由。添加这个来导入这个函数:from flask import url_for.