我试图学习烧瓶并遇到以下问题。这是我试图实施的例子。
@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):
使用这个我用过
return redirect(url_for('details', form=form))
在if条件中的poll方法中。当我尝试从 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 。或者是否有任何 制作这种网址嵌套的方法,从根网址开始,然后根据业务逻辑添加子网址。
答案 0 :(得分:4)
您不能只将表单对象放入URL中,不能。 redirect()
是响应,告诉浏览器加载不同的URL,表单对象不是您可以轻松塞进URL路径元素的内容。
如果您不需要在浏览器位置栏中看到其他网址,请不要使用重定向,只需调用其他功能:
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
路由。