2017-08-02 131 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