带有参数的django redirect()
问题内容:
已经问过几个类似的问题,但是花了很长时间之后我找不到我的问题的答案。
在下面的代码中,当我使用参数“ username”从“ myView”重定向到“ anotherView”时,它可以正常工作。但是我也需要在此重定向中包括“
range”参数,因为重定向后使用的模板需要此“ range”。每当我尝试执行此操作时,都会出现以下错误:
-“不要在对reverse()的调用中混合 args和* kwargs”
有没有一种方法可以按照我想要的方式进行管理?
def myView(request):
if request.user.is_authenticated():
if request.method == 'POST':
#my code comes here
....
return redirect('anotherView', username=request.user.username, {"range": range(int(layout))})
def anotherView(request,username):
if request.user.is_authenticated():
#my code comes here
....
return redirect(something)
问题答案:
redirect
只是一个包装,HttpResponseRedirect
它自动要求reverse
您创建要重定向到的URL。结果,传递给它的参数不是任意的,它们必须与传递给它们的参数相同reverse
,尤其是只有创建URL所需的参数。
许多人似乎很难理解不能将数据随意传递给视图。HTTP是一种无状态协议:每个请求都独立存在,就好像用户从未访问过该站点的任何其他页面一样。创建会话的概念是为了给诸如网站之类的凝聚力单位提供一种“状态”感。对于会话,数据以某种形式的持久性存储和“密钥”来存储,以查找将数据提供给客户端(通常是用户的浏览器)。在下一页加载时,客户端将密钥发送回服务器,服务器使用它来查找数据以显示状态。
因此,如果您需要一个视图中的数据可在另一个视图中使用,则需要将其添加到会话中,进行重定向,并从下一个视图中查找会话中的数据。