问题描述
Django 在从一个视图重定向至另一个视图的时候,需要使用return redirect('另一个视图的url') 来进行重定向,并不能像render方法一样给模板传递参数。那么如果需要传递一些参数到另一个视图去使用呢?
场景例如:从视图1传递参数提供视图2弹窗显示。
解决的思路
直接单一使用redirect方法是没有办法传递的参数的,那么可以采用cookie和session这两种方式来存储数据,然后在另一个视图进行读取。从而折中达到这种传递参数的效果。
那么知道解决的思路之后,相信大部分就自己怎么处理了,下面来做个简单的示例。
redirect参数传递示例
下面使用session存储数据的方式来进行一个数据传递的示例。
1) 编写一个存储session参数数据,然后redirect另一个视图B的视图A
def session_test(request):
request.session['msg']='提示消息内容'
return redirect('assetinfo:session_test_display')
2) 编写读取session参数的视图B
def session_test_display(request):
return render(request, 'assetinfo/session_test.html')
3)编写视图B使用的模板,直接读取session的数据
<h1>{{ request.session.msg }}</h1>
4)测试访问视图A,然后重定向至视图B,查看是否正常显示session的数据在模板中展示
访问视图A:http://127.0.0.1:8000/assetinfo/session_test
浏览器重定向视图B后显示如下:
5)查看Django的日志,确认请求:
[22/Aug/2019 00:05:10] "GET /assetinfo/session_test HTTP/1.1" 302 0 # 302重定向
[22/Aug/2019 00:05:10] "GET /assetinfo/session_test_display HTTP/1.1" 200 201