2017-08-02 133 views
2

我想知道是否有可能通过redirect(url_for())传递一个值而不成为GET。通过变量重定向url_for烧瓶

基本的例子:我有一个家功能:

@app.route("/") 
def home(msg=None): 
    return render_template("home.html", mgs=msg) 

我怎么能传递一个消息发送给家庭功能? 换句话说,我可以这样做:

@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 /毫克= '退出'。

据我所知,url_for是基于传递给它的函数的名称生成一个url。你能传递一个值给那个函数吗?

+0

一个总值(但不是完全不切实际的)方法是使用一个会话变量,但除此之外,没有你不能。 – CodeLikeBeaker

+0

您可以,*如果网址期望该变量。因此,如果你的路由是“/ logout /:message”,那么这将起作用,但是你的URL最终会变成“/注销/注销”,这将更加糟糕。 (虽然请注意,关于使用会话没有任何重要内容;这正是他们的目的。) –

回答

1

什么闪光变量工作?

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/

+0

这看起来好像可以工作,会读取它。 thx – lciamp

+0

ETA:这有效。谢谢 – lciamp

0

不,我不这么认为,但你可以使用GET参数,如:

redirect('home?msg=You%20are%20loged%20in') 

,而是使用模板你可以使用JS

+0

是的,我想使用模板中传递的值。似乎使用GET的混乱。 (用户可以让页面说什么)我想我会在需要时使用render_template。 – lciamp

+0

我不是在这里,用户更改页面说的文字有什么问题? –

+0

没有错,我只是试图避免使用GETs – lciamp