上下文处理器是用来返回一些在全局模板中都可以使用的数据,比如登入后的用户信息,在很多页面中都需要使用,那么我们可以放在上下文处理器中,就没有必要在每个视图函数中都返回这个对象了。
步骤1:在APP内新建一个python文件(或者单独创建一个python包用来管理所有的上下文处理器)
步骤2:在python文件中定义个函数,只有一个参数(request),函数中处理完自己的逻辑后,把需要返回的数据通过字典的形式返回,如果没有数据返回就返回一个空字典。
步骤3:在setting中注册(TEMPLATES→OPTIONS→context_processors),格式是APP名字.文件名.函数名
如下定义一个获取用户名的上下文:
context_processors.py
from front.models import User def front_user(request): user_id = request.session.get("user_id") context = {} if user_id: try: user = User.objects.get(pk=user_id) context["front_user"] = user except: pass return context
注册:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , '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', "front.context_processors.front_user" //注册自己的上下文 ], }, }, ]
模板中的使用:
{% if front_user %} {{ front_user.username }} {% else %} 没有 {% endif %}