2009-09-22 73 views
3

我不知道是否有可能,但是我想使用中間件在URL的末尾添加一些參數。完成請求的URL後可以不重定向嗎?在Django中間件中修改地址

即。 用戶點擊:.../some_link 和中間件其重寫爲:??/ some_link PAR1 = 1個& PAR2 = 2

另一種方法是修改作出反應並更換所有的HTML鏈接,但它不是我我喜歡做。

感謝

回答

1

我認爲這真的取決於你的問題以及你究竟在做什麼。

如果不重定向用戶,則無法更改URL,因爲您無法在沒有重新加載的情況下修改頁面上的URL。基本上重定向是一個迴應,告訴用戶繼續前進,沒有辦法改變URL。請注意,即使你用JavaScript這樣的東西來做,你基本上和重定向一樣,所以它不能在客戶端或服務器端完成。

我認爲這可能有幫助,如果你向我們解釋爲什麼你需要通過URL傳遞這些信息。爲什麼不在會話中存儲數據?

我想你可以將數據添加到請求對象,但不會將其添加到URL。

+0

謝謝,終於這對我來說很清楚。 – yezooz 2009-09-22 20:30:59

4
class YourRedirectMiddleware: 

    def process_request(self, request): 
     redirect_url = request.path+'?par1=1&par2=2' 
     return HttpResponsePermanentRedirect(redirect_url) 

什麼是你想實現的目標以及爲什麼這樣?

+0

但它是否重定向,我想避免。 結果應該像oldschool在請求之間的URL中傳遞session_id一樣。我不得不這樣做:/ – yezooz 2009-09-22 11:42:33

+0

你應該警惕這個解決方案,就好像你有POST數據一樣,它將在重定向期間丟失。 – 2009-09-22 14:02:08

+0

解釋你的需求,我不明白你爲什麼要這樣做 – zalew 2009-09-22 14:32:56

0

你可以在中間件中做任何你喜歡的事情。您可以訪問請求對象,如果需要,您可以獲取URL並重定向到新的URL。

我的問題是,你爲什麼要這樣做?如果您需要保留有關請求的信息,那麼適當的位置在會話中。