2013-06-27 16 views
0

我正在使用web.py框架的項目。如果從數據庫查詢返回的結果爲空(或返回的行數爲零),我有一個用於將用戶重定向到另一個屏幕的小代碼。web.redirect()不工作在web.py

voma_user_details = get_user_by_email(['id','is_active'],None,email) 
if len(list(voma_user_details)) == 0: 
    #return redirect_url+'?error=User not found in database' 
    web.redirect(redirect_url+'?error=User not found in database')  
voma_id = int(voma_user_details[0]['id']) 

當查詢返回零個記錄在這裏,頁面應該被重定向到REDIRECT_URL,但重定向不能正常工作,並提出了下一行即列表索引異常超出範圍(如表的長度零)。我通過在if塊中打印重定向url進行檢查,它將進入塊但不重定向頁面。

任何指針將不勝感激。

回答

2

web.redirect返回一個Redirect對象,它是Exception的一個實例。

您應該提高它(或者您也可以返回它)以導致重定向發生。

否則,該方法的其餘部分仍將被執行,這可能會導致一個無關的異常(在這種情況下,IndexError是因爲您試圖獲取空列表的一個元素)。

如果您只調用web.redirect,則返回的字符串將作爲響應內容發送,但響應標頭仍將包含重定向(使用狀態301)。但瀏覽器通常會立即執行301重定向。

+0

以前使用的代碼相同。當我爲腳本添加了更多重定向時,它就崩潰了。不過,我會嘗試使用它返回或加註。 –

+0

@AnkitJaiswal - 好吧,我錯了,只是調用重定向設置301狀態並添加位置hresponse頭。我已經更新了我的答案。 – mata

+0

使用return web.redirect()工作。謝謝@mata –

1

貌似web.seeother()是你想要什麼: http://webpy.org/cookbook/redirect%20seeother

我用 「養web.seeother(XX)」 了很多,但沒有web.redirect()呢。從上面的鏈接引用:

這是不可能的,你要使用的功能web.redirect非常頻繁 - 這似乎做同樣的事情,但它發出的HTTP代碼301,這是一個永久重定向 。大多數Web瀏覽器都會緩存新的重定向,並在您嘗試再次執行操作時自動將您發送到該位置。重定向的一個很好的用例是當您更改站點的URL結構時,但希望舊鏈接由於書籤而工作。

+0

我首先使用了web.seeother(),但也面臨着同樣的問題。然後我嘗試了web.redirect(),並且它的工作更早。當我添加更多重定向條件時,它停止。 –