Django2.0——上下文处理器

官方文档参考

在settings文件的模板配置中,有着context_processors属性,他的中文翻译叫上下文处理器。这个上下文处理器与视图函数的context类似。他的目的都是给模板传递值,但与context不同的是,context_processors是给所有的模板都同时传值,相当于给每个视图的context字典中都添加了指定的值。context_processors属性值是一个列表,上下文处理器的执行顺序从上而下,后面传递的值,若出现key相同,将会出现值覆盖的情况。

默认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',
            ]


自定义上下文处理器

首先我们在一个app下创建一个processor.py文件,在里面自定义一个函数,这个函数接收一个HttpRequest对象,返回一个字典。下面这个函数来生成一个key为ip,value为当前访问服务器的ip地址,并将其返回给视图函数中的每一个context。

def my_name(request):
    ip = request.META.get('REMOTE_ADDR')
    return {'ip':ip}

定义好的上下文处理器要在settings文件注册,如下图:

Django2.0——上下文处理器

在模板中添加文字及模板变量为 访问IP为:{{ ip }},可以发现效果如下。

Django2.0——上下文处理器