2012-10-01 49 views
0

我想瀏覽器重定向到網站根目錄,並傳遞一個變量,以觸發JS通知功能......這一切都與Django的。Django重定向到站點根目錄與變量....?

我現在是這樣的:

urls.py:

url(r'^accounts/password/reset/complete/$', views.passwordResetComplete, 
    name='password_reset_complete'), 

views.py:

def passwordResetComplete(theRequest): 
return redirect(home(theRequest, 'Password reset successful')) 

def home(theRequest, myMessage=None): 
......... 
    return render_to_response('new/index.html', 
           { 
          "myTopbar": myTopbar, 
          "isLoggedIn": isLoggedIn, 
          "myMessage": myMessage 
          }, 
          context_instance=RequestContext(theRequest) 
         ) 

我得到這個錯誤:

NoReverseMatch: Error importing 'Content-Type: text/html; charset=utf-8.......(gives full HTML of page) 

我一直在解決一些不同的解決方案沒有任何東西似乎以我需要的方式工作。我得到的最接近的是用根中的JS函數重定向到'/?query-string'以檢查該查詢字符串,並在存在該函數時運行該函數。但是,這會將查詢字符串保留在用戶導航站點期間(即100%AJAX)的URL中。我想避免在URL中有任何字符串/長href。

會很感激,如果任何人都可以告訴我怎麼解決這個問題。

回答

3

HTTP是一種無狀態的協議,這意味着每一個請求都是完全獨特的,並且與任何以前做過的所有事情分離開來。更簡單地說,只有這樣(在HTTP),以「傳遞變量」與URL是將其添加到URL本身(/someobject/1/,例如,其中1是一個對象ID),或在查詢字符串(?someobject=1)。無論哪種方式,信息都嵌入在的URL中,並且由您的應用程序來解密該URL中的信息並對其進行處理。

「會話」的概念被引入,以此來提供狀態到無狀態協議是HTTP。它的工作方式是服務器向客戶端發送一個包含一些可識別信息的cookie(通常只是一個會話ID)。然後,客戶端使用每個請求將cookie發回請求標頭中的服務器。服務器看到cookie,查找會話,並繼續無縫地繼續進行。這是不正確的狀態,但它確實提供能力基本上模仿狀態,它的傳遞請求之間的數據,而無需在URL中嵌入實際的數據唯一方式。

如果您需要返回的是給用戶的消息,如「密碼重置成功」,您可以並應該簡單地使用Django's messages framework,它本身使用會話傳遞消息。它爲客戶端設置一個cookie,以便您可以重定向到任何URL。這個cookie將被返回,並且對這個新的URL有請求,Django會把這個會話中的消息添加到你的模板中該URL的適當位置。

如果您需要實際調用一些JavaScript,那麼您應該通過AJAX發出請求。在響應中,你可以通過JSON返回你想要的任何數據(並且按照你喜歡的方式處理這些數據),甚至可以返回Javascript來運行。

+0

謝謝克里斯。對問題的有用解釋。我希望能夠使用簡單的東西,所以我想我只需要堅持使用URL字符串。雖然我會研究消息框架。 – Erve1879

+0

難以置信的容易理解。你應該寫一本關於http如何工作的書,我會買它 – Philip007

0

redirect docs,你不能簡單地重定向到一個視圖,而只是一個URL或對象/認爲是一個分配給網址了。因此,你有兩個選擇:

一)調用視圖直接這樣:

return home(theRequest, 'Password reset successful') 

B)添加URL模式那樣:

url(r'^your_patterns/$', views.home, msg='',name='home'), 

然後你就可以做你initally做:

return redirect(views.home,('Password reset successful',)) 

或從我的角度來看,即使是整潔:

return redirect('home',('Password reset successful',)) 
+0

感謝您的答案,但我需要把href位置回到根...做a)或b)導致「... com /任何/ url /去/這裏」這是不會工作的,不幸的是。所以我需要使用重定向... – Erve1879

+0

剛剛更新了我的答案 – schacki

+0

謝謝schacki。我嘗試了更新的解決方案,並得到這個錯誤:'NoReverseMatch:反向的'家'與參數' – Erve1879

相關問題