当前位置:首页 » 《关注互联网》 » 正文

40.上下文处理器&&如何自定义上下文处理器并使用_孤寒者的博客

72 人参与  2021年09月12日 09:43  分类 : 《关注互联网》  评论

点击全文阅读


引言——
  在前面我们知道在模板中想要使用的变量是从视图函数中的context这个上下文的参数中传递进来的,每个视图函数需要什么参数就传什么参数。
  但是,假设我们现在有这么多问题,我需要给多个不同的模板传递几个相同的变量使用,难道我要给每个模板对应的视图函数都加context,使用其传递嘛?
  确实可以,但是岂不麻烦?这里就要请出我们伟大的**上下文处理器!**我们使用它,可以一次性将指定变量传给所有模板,供每个模板使用!!!

上下文处理器(Context Processor)

1.上下文处理器是个啥? && 它是干啥的?

  • 上下文处理器也称作上下文渲染器。但我更倾向于称其为处理,毕竟processor的翻译是“处理。”但是称为上下文渲染器也有道理,渲染更接近于使用场景。

  • Django中的Context Processor主要是应用于模板,完成页面的绘制的一些处理,也就是所说的页面渲染。

  • 上下文,从计算机编程的角度来说——就是指环境。
    也就是说,同一段处理程序对于不同的环境,反馈出不同的处理结果。

  • 借用网上的一个例子:用户访问站点的时候,站点的所有页面上都要能够显示这个用户自己的IP地址。
      这样的功能,我们需要从请求(request)中获取到访问用户的IP地址,然后呈现到页面中。也许大家能够想到,我们可以在每个页面对应的视图函数中进行这个处理,但是未免太过麻烦。最好的方式是将处理过程定义一次,就能够在每个页面中使用。
      此时,我们可以通过自定义一个上下文处理器帮助我们完成。
    面对不同来源的用户通过同一个处理器完成页面上不同IP地址的渲染。

上下文处理器就是创建模板变量,但是与使用context传参有所不同。使用上下文处理器可以给每一个模板都提供相同的变量(即一次性将制定变量传给所有模板,让每个模板都可以使用)

2.来看一看Django中的上下文配置项

在settings.py中,包含了当前使用的上下文处理器。他的作用是可以给每一个模板都提供相同的变量。
在这里插入图片描述

3.自定义上下文处理器 && 使用

(1)在主目录下新建一个名为“mycontexprocessor.py”的文件专门用于编写自定义上下文处理器:

此处就实现上述所说的网上的那个例子,所以在这个文件中添加获取用户IP地址的代码。

(小提醒:自定义上下文处理器也可以放在该项目的任意可以导入的地方【一般放在 app根目录里面~】)

详细步骤:

  1. 在主目录下创建了一个mycontextprocessor.py的文件.
  2. 在mycontextprocessor.py的文件中创建一个mytest的函数
  3. 必须传入request这个参数
  4. 必须返回一个字典类型的对象.

在这里插入图片描述

(2)将mytest注册到settings.py中上下文配置项里:

在这里插入图片描述

先找到文件所在的位置,再把自定义的上下文处理器的函数添加即可。(TEMPLATES->OPTIONS->context_processors中)

(3)在页面模板中添加标记:

在这里插入图片描述
完成上述代码后,Django调用模板时会先通过上下文处理器进行处理,并将处理后返回的数据字典传入模板,通过模板标记获取数据。

此时,我们就可以打开开发服务器,进行访问测试了。

在这里插入图片描述


点击全文阅读


本文链接:http://zhangshiyu.com/post/27590.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 网站收录 | 免费二级域名 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备12007198号-1