重定向时发送数据到django中查看

时间:2015-07-30 16:42:05

标签: python django django-views

是否可以在重定向到另一个视图时发送数据?

例如: -

def social_user():
//do something here
 return redirect('name of the view',{'variable':'value'})

或在函数和视图函数之间交换数据的任何其他替代方法。

4 个答案:

答案 0 :(得分:1)

有两种方法可以将数据发送到生成的目标,但首先您应该了解重定向的工作方式。

当服务器重定向时,它只是设置Location标题,告诉浏览器接下来要获取哪个页面。

Location: /foo.html

由于即使存在主体也完全被忽略,您必须以某种方式通过HTTP标头传递数据。

1)查询参数

最简单的方法是使用查询(GET)参数,然后可以从目标页面读取这些参数:

Location: /foo.html?username=bob

缺点是用户可以轻松查看和修改此值。

2)Cookies

会话由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)

  1. 手动构建“模拟django请求”并直接调用视图
  2. 使用查询参数

答案 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")