我有一個頁面x和頁面y上的按鈕重定向到頁面z。 在頁面z上,我有一個需要填寫的表單。保存後,我想重定向到頁面x或y(最初我選擇哪一個)。Django重定向到上一個視圖
通常,您在視圖中使用「重定向」,並指定要重定向到的頁面。但是,在這種情況下你會做什麼?
任何想法?
謝謝!
我有一個頁面x和頁面y上的按鈕重定向到頁面z。 在頁面z上,我有一個需要填寫的表單。保存後,我想重定向到頁面x或y(最初我選擇哪一個)。Django重定向到上一個視圖
通常,您在視圖中使用「重定向」,並指定要重定向到的頁面。但是,在這種情況下你會做什麼?
任何想法?
謝謝!
您可以使用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)}
存儲有關您的用戶訪問的頁面的信息,以便稍後檢索。可能是會議中最好的地方。
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應用程序外部,這是唯一的方法)。
所以我在頁面Y鍵應該是這樣的: ?由於某種原因,這是行不通的。首先,我的表單不再保存,即使「我的表單」在我的if表單中有效。我將被重定向到原始歡迎頁面..雖然這是錯誤的頁面開頭..我甚至不知道它在哪裏得到了從大聲笑.. – JohnnyCash 2012-02-19 20:14:54
我已經更新了答案 - 我已經在一個額外/在'<表單動作...'。這裏有兩個階段。當你最初到達空的表單頁面並且你到達的URL被嵌入在
謝謝:)只有一個快速更正:在你的