在Flask中重定向并传递数据参数
我在学习Flask的时候遇到了一个问题。这是我尝试实现的一个例子。
@app.route('/poll', methods = ['GET', 'POST'])
def poll():
form = PollForm()
if form.validate_on_submit():
return render_template('details.html', form = form)
return render_template('poll.html', form=form)
但是我想为details.html设置一个不同的URL映射,所以我创建了另一个路由,如下所示:
@app.route('/details/<form>')
def details():
return render_template('details.html', form = form):
为了使用这个路由,我在if条件里的poll方法中用了
return redirect(url_for('details', form=form))
。当我尝试从detail.html访问它时,我无法将其作为对象获取。当我尝试用字符串替换表单时,它工作得很好。你能建议一些方法,让我在/details路由中将表单作为对象访问吗?
编辑
我在问这种情况是否可能。
@app.route('/poll', methods = ['GET', 'POST'])
def poll():
form = PollForm()
if form.validate_on_submit():
@app.route('/details')
return render_template('details.html', form = form)
return render_template('poll.html', form=form)
每当我们进入if条件时,URL将是/poll/details。或者有没有什么方法可以实现这种URL嵌套,从一个根URL开始,然后根据业务逻辑添加子URL。
1 个回答
8
你不能把一个表单对象直接放进网址里,这样是不行的。redirect()
是一种 响应,它告诉浏览器去加载一个不同的网址,而表单对象并不是你可以轻易放进网址路径里的东西。
如果你不需要在浏览器的地址栏看到不同的网址,那就不要使用重定向,而是直接调用一个不同的函数:
def details(form):
return render_template('details.html', form = form):
@app.route('/poll', methods = ['GET', 'POST'])
def poll():
form = PollForm()
if form.validate_on_submit():
return details(form)
return render_template('poll.html', form=form)
如果你确实需要在浏览器中显示一个不同的网址,那就让 <form>
元素提交到 /details
这个路径,而不是 /poll
这个路径。