2017-10-05 99 views
0

我試圖將變量su傳遞給具有以下重定向的另一條路由。將參數傳遞給其他路由不起作用

return redirect(url_for('showspace', spacename=user.username, su='Welcome back')) 

的路線是這樣的:

@app.route('/space/<spacename>', methods=['GET', 'POST']) 
@login_required 
def showspace(spacename, su = None): 
    if su != None: 
     print(su) 

如果路由被稱爲無su參數我想suNone。但是,如果su傳遞給showspaces我想要打印內容su。這樣做會拋出以下錯誤:

TypeError: showspace() missing 1 required positional argument: 'su' 

感謝您的幫助。

+0

我發現這個http://xahlee.info/python/function_def.html這是Python 2中,但我想我已經適應正確的。即使我不使用su = None,但只是su不起作用。 – user3080315

+0

抱歉,誤讀。 – hop

回答

0

對於視圖函數中的每個參數,您也會創建一個url變量。

,所以你可能需要您的網址更改爲以下幾點:

@app.route('/space/<spacename>/<su>', methods=['GET', 'POST']) 

,然後你需要的默認值是零,你可以這樣做:

def showspace(spacename, su = None) 

和這第二部分,你已經找到了你自己的。所以只需調整url裝飾器就可以解決問題。

請記住,您使用url(GET)得到的值不一定是您從url_for函數發送的值,因爲它們可以由用戶真正輕鬆地更改。

如果此方法的用戶,你將不得不打電話給你的觀點類似以下內容:

<domain>/space/<spacename>/ 

注意結尾的斜線。因此,如果你希望能夠調用它沒有斜線,有兩種選擇:

  1. 使用POST
  2. 添加一個新的URL規則發送su

添加新URL規則,你可以這樣定義它們:

@app.route('/space/<spacename>/<su>/', methods=['GET', 'POST']  
@app.route('/space/<spacename>/', methods=['GET', 'POST']) 
def showspace(spacename, su = None): 
    pass 
+0

謝謝你的幫助。當我使用你的代碼時,我能夠不帶su參數調用example.com/space/test嗎? – user3080315

+0

我會爲此更新我的答案。 – senaps