Django函数式视图中如何获取前序视图传递给模板的context数据
Django跨视图上下文数据获取方案
实现方案
GET参数传递(适合非敏感、短小数据)
这是最轻量的实现方式,直接将需要传递的参数拼接在跳转URL后即可:- 修改
some_template.html中的跳转链接,携带name参数:
<div> {{name}} <a href="{% url 'second_view' %}?name={{ name }}">Redirect</a> </div>- 在
method_B中从GET请求提取参数:
def method_B(request): # 第二个参数为默认值,防止参数缺失报错 name = request.GET.get('name', '默认值') context = {"second":"second", "name": name} html_template = loader.get_template('template_B.html') return HttpResponse(html_template.render(context, request))- 修改
Session存储(适合敏感、体积稍大的数据,或需要跨多请求复用的场景)
利用Django自带的session机制将数据存在服务端,避免参数暴露在URL中:- 修改
method_A,将数据存入session:
def method_A(request): context = {"name":"sample"} request.session['name'] = "sample" html_template = loader.get_template('some_template.html') return HttpResponse(html_template.render(context, request))- 在
method_B中从session读取数据,不需要时可主动删除释放空间:
def method_B(request): name = request.session.get('name', '默认值') # 后续无需使用该数据时可主动删除 # del request.session['name'] context = {"second":"second", "name": name} html_template = loader.get_template('template_B.html') return HttpResponse(html_template.render(context, request))- 修改
自定义上下文处理器(适合全站点/多个视图通用的公共数据)
如果name这类数据是多个模板都需要用到的公共数据,可以写自定义上下文处理器直接注入所有模板的上下文,无需每个视图单独传递。
内容的提问来源于stack exchange,提问作者John Byro
相关产品推荐
相关产品推荐

