2009-12-11 78 views
3

在表單提交場景中,表單發佈到「/ submit」。我想在成功時將用戶重定向到「/ sucess」,並在新網址傳遞一些消息給模板。如何在Django中做到這一點? render_to_response不會重定向,HttpResponseRedirect不會執行模板呈現。在Django中響應重定向的url

+0

我假設HttpResponseRedirect只是告訴客戶端重定向?它重定向的頁面不會負責渲染嗎? 另外,如果有人手動進入您的/成功頁面? – 2009-12-11 14:50:59

回答

3

如果你成功頁面需要一個動態的消息,您需要在那裏通過它在某種程度上。您可以通過您重定向到的URL(例如return HttpResponseRedirect('/success/?msg=My+success+message+here'))中的GET參數或通過在會話中設置一些成功視圖可以選取的值來完成此操作。

0

還有就是你想要做什麼沒有什麼好辦法。瀏覽器提交表單,該表單將使用戶進行/提交。一旦你決定是否「成功」,那就太遲了;瀏覽器已經決定了它的目的地。你所能做的只是重定向。但是,正如你發現的那樣,重定向時很難保持你的POST狀態。

我會放棄這個。這不是網站應該如何工作。

9

Daniel Roseman的回覆可能是危險,將您的網站打開爲XSS漏洞。

請確保您從任何消息傳遞的HTML標籤剝離如果您必須這樣做。

一個更好的方式是重定向到/成功/味精= OK,並在您的視圖字典:

{ 'ok': 'Your success message' } 
0

我認爲Django的已經做了這個,如果你延長generic view。在創建時,有一個可選參數「post_save_redirect」。該功能用於自動生成的Django管理系統。例如,如果你想要一個新的資源,說用戶,你去url「/用戶/添加」。提交後,將其重定向到「/ user/1」,並顯示成功消息「您剛剛保存了用戶#1」。所以這是可能的,但我仍在研究如何在不擴展通用視圖的情況下做到這一點。我對Django和python仍然很陌生,所以通過Django核心來看看他們是如何做到這一點對我來說不是那麼容易。

1

做你想做的事情的最佳方式是: 在你的視圖中將成功消息(或錯誤消息)設置爲字典。並使用render_to_response顯示任何模板。

在您的模板中,您可以驗證是否有消息,以及消息是錯誤消息還是成功消息。

一些這樣的: 在您看來:

if anyError: 
    dict = {"message" : {"error" : "The error message"}} 
else: 
    dict = {"message" : {"success" :"The success message"}} 
在你的模板

{% if message %} 
     {% if message.error %} 
     {{ message.error }} 
     {% else %} 
     {{ message.success }} 
     {% endif %} 
    {% endif %} 

希望我已經幫助