2017-05-24 58 views
1

之前得到的頁面URL我有一個鏈接到一個URL,像這樣的鏈接:的Python/Django的 - 如何導航到一個新的觀點

​​

該鏈接指向一個新的觀點在Django,我的URL模式是這樣的:

url(r'^sign-in/', sign_in, name="sign_in")

在我sign_in的看法,我想有機會到用戶最初點擊鏈接的URL。具體來說,我想添加這個URL有一個名爲returnUrl的參數到一個新的URL。我的sign_in視圖然後可以重定向到這個新的URL,並且相應的視圖將有權訪問returnUrl參數。

例如:

  1. 用戶點擊 '登錄'
  2. 網站導航到example.com/sign-in/
  3. sign_in視圖重定向到sign_in_page從步驟1加入URL作爲參數。
  4. sign_in_page有權訪問URL參數。

我該如何在Django中實現這個功能?我的看法是這樣的......

from django.http import HttpResponse 
from django.shortcuts import render, redirect 
from django.core.urlresolvers import reverse 
from django.http import HttpResponseRedirect 
from django.core.urlresolvers import resolve 


def sign_in(request): 
    # I need the original URL the user came from here 
    # to add it as `returnUrl` below: 
    return HttpResponseRedirect(reverse('sign_in_page') + '?returnUrl=example.com/whatever') 


def sign_in_page(request): 
    return render(request, 'sign-in.html') 

請讓我知道如果我通過使用重定向下去一個錯誤的和黑暗的路。對我來說,它似乎是添加URL參數的唯一方式 - 這對我的實現很重要。如果你知道沒有重定向的方法 - 讓我知道!

+0

你能告訴一下參數嗎?意味着你如何保持它?並且整個頁面的參數是不同的? – Exprator

+0

當用戶點擊「登錄」鏈接時,名爲'returnUrl'的參數需要是當前的URL。登錄過程完成後,我可以在我的'sign_in_page'視圖中使用此功能將用戶重定向到他們點擊鏈接的原始頁面。 – shrewdbeans

回答

2

如果您想在視圖之間傳遞數據,您可以使用POST數據或GET。在你的情況下,GET數據就是你想要的。 所以你應該使用下面的URL。

"{% url 'sign_in' %}?returnUrl={{request.path}}" 

然後後您的觀點:

  1. 檢查,如果GET變量 'RETURNURL' 被送到
  2. 重定向到下一個URL
  3. 否則重定向到默認頁面

在以下示例中,我使用從FormView繼承的基於類的視圖

def get_success_url(self): 
    if self.request.GET.get('next', ''): 
     return (self.request.GET.get('next', '')) 
    return reverse_lazy('experiment_list') 

注:請確保您在您的設置如下,以確保您得到request.path變量在每個模板:

## example: settings.py 
TEMPLATE_CONTEXT_PROCESSORS = (
    # other items... 
    'django.core.context_processors.request', 
    # other items... 
) 
0

如果你想重定向到引用者,那麼你可以嘗試像這

from django.http import HttpResponseRedirect 

    def sign_in(request): 
     # Do your logic here 
     return HttpResponseRedirect(request.META.get('HTTP_REFERER')) 
+0

'request.META.get('HTTP_REFERER')'什麼都不返回,你知道這是爲什麼嗎? – shrewdbeans

+0

你正在使用哪個版本的django? – Adaikalaraj

+0

你確定,你的鏈接是在同一個django項目中,還是來自外部? – Adaikalaraj

1
referer = self.request.META.get('HTTP_REFERER') 

試試這個在您需要獲得前一個URL的觀點,希望這是你在找什麼

相關問題