Django进阶–上下文处理器-初识

Django进阶–上下文处理器

1. 简介

上下文处理器(context processor),用于从视图函数向模板传递参数、亦或者可以理解为给模板添加属性(字段),简言之用于后端向前端返回数据。

2. 系统上下文处理器

# 
TEMPLATES = [
    {
        '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',
            ],
        },
    },
]

2.1 debug

返回debug所需上下文变量,用于调试。

2.2 request

返回一个字典,源码如下:

def request(request):
    return {'request': request}
#简言之,增加一个request变量

2.3 auth

返回使用Django身份验证系统的应用所需的上下文变量。如果请求中没有“user”属性,请使用AnonymousUser(来自
django.contrib.auth)。简言之,返回一个"user"对象。

2.4 messages

返回一个惰性’message’变量

def messages(request):
    return {
        'messages': get_messages(request),
        'DEFAULT_MESSAGE_LEVELS': DEFAULT_LEVELS,
    }

3. 自定义上下文处理器

回想日常开发,当模板需要一个动态变量时,往往通过路由表从对应的视图函数获取(HttpResponse对象的context参数)。如果想在各个页面调用相同变量,依上述方法就需要在每个视图函数都声明该变量,造成不必要的开销,违反了软件开发准则。

这时候我们可以通过自定义上下文来达到这个目的;例如,我们需要在每个页面显示当前用户IP地址

3.1 创建模块

在app下创建上下文模块customer_context_processor.py

-project
	-project
    -app
    	-templatetags
        -forms.py
        -middleware.py
        -models.py
        -customer_context_processor.py #命名开心就好

3.2 编写代码

#customer_context_processor.py
def user_ip_show(request):  # 必须接受request参数
    ip = request.Meta['REMOTE_ADDR']
    context = {
        'showIp': 'IP地址:%s' % ip
    }
    return context  # 必须返回字典

3.3 注册

注册到settings.py->TEMPLATES->OPTIONS->context_processors

            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'book.customer_context_processor.user_ip_show',   #settings路径中从BASE_DIR往下,book是app名称
            ],

3.4 注册

<!--任意前端页面-->
{{ showIp }}

3.5 展示

欢迎回家:qwe
安全退出 IP地址:171.211.46.139

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值