使用场景:当同一个类容需要出现在多个模板中, 上下文管理器就是将这个内容以字典的形式返回给所有模板,模板通过 {{ key }}取值。
结构:上下文管理器 文件名一般为context_processors.py xxx xxx(request) 为一个自定义函数,必要参数request
配置:它需要被配置在 settings里
提示:
- 在django的上下文渲染器中,尽量不要写太重量级的代码,因为上下文渲染器的中代码,每一次请求都会执行一次,如果这个渲染器过重,会非常影响性能
TEMPLATES = [ 'OPTIONS': { # 模版中间件 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', # 返回一个user对象,前端用来判断用户是否登陆. 前端通过 {% if user.is_authenticated %}, 没登录返回false, 这是通过django自带的管理器实现的 'django.contrib.messages.context_processors.messages', 'work_register.context_processors.my_ip' # 自定义的上下文管理器 ], }, ]
自定义的管理器
def my_ip(request): if request.META.has_key("HTTP_X_FORWARDED_FOR"): ip = request.META["HTTP_X_FORWARDED_FOR"] else: ip = request.META["REMOTE_ADDR"] return {"ip1": ip}