11

我有一個頁面x和頁面y上的按鈕重定向到頁面z。 在頁面z上,我有一個需要填寫的表單。保存後,我想重定向到頁面x或y(最初我選擇哪一個)。Django重定向到上一個視圖

通常,您在視圖中使用「重定向」,並指定要重定向到的頁面。但是,在這種情況下你會做什麼?

任何想法?

謝謝!

回答

10

您可以使用GET參數來跟蹤您到達頁面z的哪個頁面。所以當你正常到達頁面z時,我們記得我們來自哪個頁面。當您在頁面z上處理表單時,我們使用之前保存的信息進行重定向。所以:

按鈕/頁上的Y型連接器應包括其值是當前的URL參數:

<a href="/page_z/?from={{ request.path|urlencode }}" />go to form</a> 

然後在page_z的觀點,你可以通過這個到模板:

def page_z_view(self, request): 
    ... 
    return render_to_response('mytemplate.html', { 'from' : request.GET.get('from', None) }) 

並在您的表單模板:

<form action="{% if from %}?next={{ from }}{% endif %}" /> 
... 

所以,現在的形式 - 當提交 - 將通過對next參數指示表單成功提交後返回的位置。我們需要revist視圖下,進行這樣的:

def page_z_view(self, request): 
    ... 
    if request.method == 'POST': 
     # Do all the form stuff 
     next = request.GET.get('next', None) 
     if next: 
      return redirect(next) 
    return render_to_response('mytemplate.html', { 'from' : request.GET.get('from', None)} 
+0

所以我在頁面Y鍵應該是這樣的: ?由於某種原因,這是行不通的。首先,我的表單不再保存,即使「我的表單」在我的if表單中有效。我將被重定向到原始歡迎頁面..雖然這是錯誤的頁面開頭..我甚至不知道它在哪裏得到了從大聲笑.. – JohnnyCash 2012-02-19 20:14:54

+1

我已經更新了答案 - 我已經在一個額外/在'<表單動作...'。這裏有兩個階段。當你最初到達空的表單頁面並且你到達的URL被嵌入在

2012-02-19 20:36:42

+0

謝謝:)只有一個快速更正:在你的 JohnnyCash 2012-02-19 20:50:09

-2

存儲有關您的用戶訪問的頁面的信息,以便稍後檢索。可能是會議中最好的地方。

2

Django的要求知道用戶來自的頁面是:

previous_page = request.META['HTTP_REFERER'] 

它將包含類似:

>>> print(previous_page) 
'http://www.myserver.com/myApp/z' 

因此你知道你來自哪裏(警告,將其視爲不安全的數據並徹底驗證,甚至可能包含惡意數據)並使用這些信息。

首先,你將它傳遞給模板

data = { 
    ..., 
    # also indicate, that saved data are valid and user can leave 
    'previous_page': previous_page, 
} 

渲染頁面z.html

return render(request, 'myApp/z.html', data) 

,並在頁面z的模板,你的元刷新標記添加到。這會導致一旦形式保存和加載頁面,用戶會被重定向自動重定向:

{% if form_is_saved and previous_page %}<meta http-equiv="refresh" content="0; url={{ previous_page }}" />{% endif %} 

這樣做的好處,這種形式是按頁z.html保存的,它充滿你不需要通過頁面x和y處理它(如果頁面x和y位於Django應用程序外部,這是唯一的方法)。

相關問題