2012-10-01 44 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

相关问题