0

我正在尝试将浏览器重定向回站点根目录并传递一个变量以触发 JS 通知功能......这都是 Django 的。

我现在拥有的是这样的:

网址.py:

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

视图.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”以检查该查询字符串并运行该函数(如果存在)。但是,这会在用户导航网站期间将查询字符串留在 URL 中(即 100% AJAX)。我想避免在 URL 中包含任何字符串/长 href。

如果有人能告诉我如何解决这个问题,将不胜感激。

4

2 回答 2

3

HTTP 是一种无状态协议,这意味着每个请求都是完全唯一的,并且与以前做过的任何事情和所有事情都是分开的。更简单地说,使用 URL “传递变量”的唯一方法(在 HTTP 中)是将其添加到 URL 本身(/someobject/1/例如,1对象 id 所在的位置)或查询字符串(?someobject=1)中。无论哪种方式,信息都嵌入在URL中,由您的应用程序从 URL 中破译该信息并对其进行处理。

引入“会话”的概念是作为向 HTTP 无状态协议提供状态的一种方式。它的工作方式是服务器向客户端发送一个包含一些可识别信息(通常只是一个会话 ID)的 cookie。然后,客户端在每个请求的请求标头中将 cookie 发送回服务器。服务器看到 cookie,查找会话并继续无缝地处理正在进行的任何事情。这不是真正的状态,但它确实提供了本质上模仿状态的能力,并且它是在请求之间传递数据而不实际将数据嵌入 URL的唯一方法。

如果您需要返回给用户的只是一条消息,例如“密码重置成功”,您可以而且应该简单地使用Django 的消息框架,它本身使用会话传递消息。它为客户端设置一个 cookie,以便您可以重定向到任何 URL。cookie 将与对该新 URL 的请求一起传回,Django 会将会话中的消息添加到该 URL 模板中的适当位置。

如果您需要实际调用一些 JavaScript,那么您应该通过 AJAX 发出请求。在响应中,您可以通过 JSON 返回您想要的任何数据(并根据您的喜好对这些数据进行操作),甚至返回要运行的 Javascript。

于 2012-10-01T14:42:30.317 回答
0

重定向文档之后,您不能简单地重定向到视图,而只能重定向到已经分配给 url 的 url 或对象/视图。因此,您有 2 个选项:

a)像这样直接调用视图:

return home(theRequest, 'Password reset successful')

b)添加这样的 URL 模式:

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

然后你将能够做你最初做的事情:

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

或者从我的角度来看,甚至更整洁:

return redirect('home',('Password reset successful',))
于 2012-10-01T13:47:14.400 回答