在Django的模板渲染流程中,上下文(Context)是视图向模板传递数据的载体,而Context Processors(上下文处理器)是Django提供的一种机制,能够在所有模板渲染时自动向上下文注入预设的全局变量,避免在每个视图中重复编写相同的数据传递逻辑。

什么是Context Processors
Context Processors本质是一个Python函数,接收一个HttpRequest对象作为参数,返回一个字典,字典中的键值对会被自动添加到所有模板的上下文里。Django默认已经内置了一些常用的上下文处理器,比如处理用户认证信息的django.contrib.auth.context_processors.auth,处理调试信息的django.template.context_processors.debug等。
默认Context Processors配置
在Django项目的settings.py文件中,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',
],
},
},
]
自定义Context Processors实现全局变量注入
第一步:创建上下文处理器函数
我们可以在任意app目录下新建一个context_processors.py文件,编写自定义的处理器函数。比如我们需要向所有模板注入站点名称和当前年份两个全局变量:
# app名称/context_processors.py
from datetime import datetime
def site_info(request):
# 返回的字典键值对会被注入到所有模板上下文
return {
'site_name': '我的Django站点',
'current_year': datetime.now().year
}
第二步:注册自定义上下文处理器
把自定义的处理器路径添加到settings.py的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名.文件名.函数名
'myapp.context_processors.site_info',
],
},
},
]
第三步:在模板中使用全局变量
配置完成后,不需要在视图中额外传递数据,所有模板都可以直接使用注入的全局变量:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>{{ site_name }}</title>
</head>
<body>
<footer>
© {{ current_year }} {{ site_name }} 版权所有
</footer>
</body>
</html>
Context Processors注意事项
- 上下文处理器会在每次模板渲染时执行,因此不要在处理器中编写耗时操作,避免影响页面响应速度。
- 处理器返回的字典键名不要和视图传递的上下文变量重名,否则视图传递的变量会覆盖处理器注入的变量。
- 如果需要依赖
request对象中的数据,要确保django.template.context_processors.request处理器已经启用,否则request参数可能无法正常获取请求信息。
常见使用场景
| 场景 | 说明 |
|---|---|
| 用户登录状态 | 注入当前登录用户对象,方便所有模板判断用户是否登录、展示用户信息 |
| 站点全局配置 | 注入站点名称、备案号、联系方式等全局配置信息 |
| 导航菜单 | 注入动态生成的导航菜单数据,避免每个页面单独查询菜单数据 |
DjangoContext_Processors模板上下文全局变量注入Python修改时间:2026-07-03 07:09:22