是否可以在重定向到另一个视图时发送数据?
例如: -
def social_user():
//do something here
return redirect('name of the view',{'variable':'value'})
或在函数和视图函数之间交换数据的任何其他替代方法。
答案 0 :(得分:1)
有两种方法可以将数据发送到生成的目标,但首先您应该了解重定向的工作方式。
当服务器重定向时,它只是设置Location
标题,告诉浏览器接下来要获取哪个页面。
Location: /foo.html
由于即使存在主体也完全被忽略,您必须以某种方式通过HTTP标头传递数据。
最简单的方法是使用查询(GET)参数,然后可以从目标页面读取这些参数:
Location: /foo.html?username=bob
缺点是用户可以轻松查看和修改此值。
会话由cookie决定,是另一个存储临时数据的地方。但这有几个缺点:
它与任何请求无关,因此您所有后续请求都可以访问数据,直到您删除它为止。
如果用户已停用Cookie,则无效。另一方面,查询参数始终有效。
如果您选择第一个选项,您可能需要编写一些自己的代码,因为Django似乎没有提供一个方便的方法来执行此操作(如果我错了,有人会纠正我)。这是一个包含功能的示例函数:
def redirect_with_query(path, query=None, *args, **kwargs):
if query is None:
query = {}
url = resolve_url(path, *args, **kwargs)
if len(query):
q_dict = QueryDict(mutable=True)
q_dict.update(query)
url += '?' + q_dict.urlencode()
return HttpResponseRedirect(url)
答案 1 :(得分:0)
答案 2 :(得分:0)
使用render()
并通过context
传递变量:
def social_user(request)
// do something here
return render(request, template_name='template.html', context={'variable': 'value'})
答案 3 :(得分:0)
第一个解决方案::
如果您可以访问social_user
中的请求变量,则只需使用会话即可。会话是在2个视图之间传输数据的最佳方式。
def social_user(request):
request.session['variable'] = 'value'
return redirect('name of the view')
然后在您的视图中,您可以使用request.session.get('variable')
第二个解决方案::
如果您无法设置会话变量,请将它们作为查询参数发送。
def social_user():
//do something here
return redirect("your_view/?variable=value")