7.1 django 上下文处理器

上下文处理器

上下文处理器是可以返回一些数据,在全局模板中都可以使用。比如登录后的用户信息,在很多页面中都需要使用,那么我们可以放在上下文处理器中,就没有必要在每个视图函数中都返回这个对象。

settings.TEMPLATES.OPTIONS.context_processors中,有许多内置的上下文处理器。这些上下文处理器的作用如下:

  1. django.template.context_processors.debug:增加一个debugsql_queries变量。在模板中可以通过他来查看到一些数据库查询。

  2. django.template.context_processors.request:增加一个request变量。这个request变量也就是在视图函数的第一个参数。

  3. django.contrib.auth.context_processors.authDjango有内置的用户系统,这个上下文处理器会增加一个user对象。

  4. django.contrib.messages.context_processors.messages:增加一个messages变量。

  5. django.template.context_processors.media:在模板中可以读取MEDIA_URL。比如想要在模板中使用上传的文件,那么这时候就需要使用settings.py中设置的MEDIA_URL来拼接url。示例代码如下:

    <img src="" />
    
  6. django.template.context_processors.static:在模板中可以使用STATIC_URL

  7. django.template.context_processors.csrf:在模板中可以使用csrf_token变量来生成一个csrf token

自定义上下文处理器:

有时候我们想要返回自己的数据。那么这时候我们可以自定义上下文处理器。自定义上下文处理器的步骤如下:

  1. 你可以根据这个上下文处理器是属于哪个app,然后在这个app中创建一个文件专门用来存储上下文处理器。比如context_processors.py。或者是你也可以专门创建一个Python包,用来存储所有的上下文处理器。

  2. 在你定义的上下文处理器文件中,定义一个函数,这个函数只有一个request参数。这个函数中处理完自己的逻辑后,把需要返回给模板的数据,通过字典的形式返回。如果不需要返回任何数据,那么也必须返回一个空的字典。示例代码如下:

     def frontuser(request):
       userid = request.session.get("userid")
       userModel = models.FrontendUser.objects.filter(pk=userid).first()
       if userModel:
         return {'frontuser':userModel}
       else:
         return {}
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.web3的call()获取不到返回值问题和解决方法 在彩票小合约中,遇到一个问题:合约中 有两个方法第一个返回...
    前端老邹_伯通阅读 5,293评论 1 1
  • 2018年6月8日 星期五 晴 昨晚家里来电话说儿子的姐姐(姑姑家的)上学路上遇到了个傻子欺...
    锴博麻麻阅读 1,495评论 0 2
  • 昨天是2017年7月1日,这绝对是个不平凡的日子——香港回归20周年! 媒体关注的焦点自然是香港...
    秀秀小屋阅读 1,280评论 0 1
  • 烟台恒美广告有限公司 和利喷画 简约装饰工程有限公司 简•美画框工作室 一站式广告服务集商 比学习,清晰的目标,让...
    0222e7fbf980阅读 734评论 0 0