我想知道是否有可能通过redirect(url_for())
传递一个值而不会成为GET。
基本示例:我有一个家庭功能:
@app.route("/")
def home(msg=None):
return render_template("home.html", mgs=msg)
如何将消息传递给home函数? 换句话说,我可以这样做:
@app.route("/logout")
def logout():
logout_user()
return render_template('home.html', msg="logged out")
与redirect(url_for())
?
这样:
@app.route("/logout")
def logout():
logout_user()
return redirect(url_for(('home', msg="logged out"))
只是给我一个带有get /?mgs ='已退出'的网址。
我知道url_for正在根据传递给它的函数的名称生成一个url。你能把值传递给那个函数吗?
答案 0 :(得分:2)
flash变量怎么样?
flash("logged out")
return redirect(url_for('home'))
然后在home
的模板中
{% with passed = get_flash_messages() %}
{% if passed %}
<!-- passed should contain 'logged out' -->
{% endif %}
答案 1 :(得分:0)
不,我不这么认为,但你可以使用GET参数,如:
redirect('home?msg=You%20are%20loged%20in')
而不是使用模板来完成工作,你可以使用JS
答案 2 :(得分:0)
另一种可行的方法是使用会话:
别忘了将其添加到您的导入中
from flask import Flask, ..., session
在logout
定义中,将消息存储在会话中:
@app.route("/logout")
def logout():
logout_user()
session['msg'] = "logged out"
return redirect(url_for('home'))
在home
函数中
@app.route("/")
def home(msg=None):
return render_template("home.html", msg=session['msg'])
在home
模板中,只需将其用作常规变量即可:
<p>Dear user, you have been {{ msg }} </p>
通过这种方式,您避免使用get
,而Flask可以解决所有问题
答案 3 :(得分:0)
你试过了吗?
msg="logged out"
return redirect(url_for('home'),code=307)
代码 307 用作“POST”