「Django框架」上下文处理器

 上下文处理器用来处理返回给全局模板的数据,可以通过上下文处理器统一给上下文附加数据,这样一来,就无需在每个视图函数中实现重复的逻辑。

一、内置上下文处理器

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

  1. django.template.context_processors.debug:附加一个debug变量,其值为settings.DEBUG的值;附加一个sql_queries变量,在模板中可以通过该变量查看请求当前页面时数据库执行的sql语句;
  2. django.template.context_processors.request:附加一个request变量,封装了当前页面发送请求时的request对象,一般用来获取当前页面的路径;
  3. django.contrib.auth.context_processors.auth:通过Django内置的用户系统,给上下文附加一个user对象;
  4. django.contrib.messages.context_processors.messages:增加一个messages变量;
  5. django.template.context_processors.media:能够在模板中通过{{MEDIA_URL}}来使用settings.py中配置的MEDIA_URL,这样,就可以在前端访问上传到服务器的文件;
  6. django.template.context_processors.static:在模板中可以使用STATIC_URL标签;
  7. django.template.context_processors.csrf:在模板中可以使用{{csrf_token}}变量来生成一个csrf token

二、自定义上下文处理器

 可以自定义上下文处理器,其本质上就是一个函数。可以在app目录下创建一个py文件,用来存放所有需读取该app数据的上下文处理器;也可以在项目文件夹下,创建一个包用来存放所有实现微处理器。
 对于自定义的上下文处理器,该函数只传入一个request参数。在该函数内实现所需逻辑后,将需要返回模板的数据直接通过字典的形式返回。如果不需要返回任何数据,也必须返回一个空字典。
示例代码:

 def frontuser(request):
   userid = request.session.get("userid")
   userModel = models.FrontendUser.objects.filter(pk=userid).first()
   if userModel:
     return {'frontuser':userModel}
   else:
     return {}

 定义完处理器后,还需在settings.TEMPLATES.OPTIONS.context_processors中进行注册,注册的起始环境为项目文件夹:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
               
                # app文件夹.上下文处理器所在的模块.上下文处理器的函数名 
                'front.context_processors.front_user',
            ],
        },
    },
]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值