传递变量以重定向烧瓶

时间:2017-08-02 19:13:05

标签: python flask

我想知道是否有可能通过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。你能把值传递给那个函数吗?

4 个答案:

答案 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 %}

另见:http://flask.pocoo.org/docs/0.12/patterns/flashing/

答案 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”