十二. Django 上下文处理器
1.什么是上下文处理器
在模板中想要使用的变量是从视图函数中的context这个上下文的参数中传递进来的,每个视图函数需要什么参数就传什么参数.
上下文处理器就是创建模板变量.
上下文处理器在项目文件中的setings.py文件的TEMPLATES中,他的作用是可以给每一个模板都提供相同的变量
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'template')],
'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',
],
},
},
]
- django.template.context_processors.debug:附加一个debug变量,其值为settings.DEBUG的值;附加一个sql_queries变量,在模板中可以通过该变量查看请求当前页面时数据库执行的sql语句;
- django.template.context_processors.request:附加一个request变量,封装了当前页面发送请求时的request对象,一般用来获取当前页面的路径;
- django.contrib.auth.context_processors.auth:通过Django内置的用户系统,给上下文附加一个user对象;
- django.contrib.messages.context_processors.messages:增加一个messages变量;
2.自定义上下文处理器
在刚才的中间件的例子中((5条消息) 十一.Django的中间件 2021-03-18_明玥几时有的博客-CSDN博客),我们给request 增加了一个myuser的属性,
而如果每个模板中也就是每个页面上都需要用到登录用户名这个变
量名的话, 那么我们也可以把这个变量在上下文处理器中将变量传给模板.
1.实现过程
1.在主目录下创建了一个.py的文件.
2.在.py的文件中创建一个myuser的函数
3.必须传入request这个参数
4.必须返回一个字典类型的对象.
2.注册上下文处理器
mysite是项目名,先找到文件所在的位置,把自定义的上下文处理器的函数添加到TEMPLATES->OPTIONS->context_processors中。
3.总结: 自定义中间件与上下文处理器
我们刚才分别用中间件和上下文完成了跟登录用户有关的例子, 最后的结果都是能在页面上显示用户的用户名了.
- 中间件是在用户请求到响应的过程中去加入一些额外的逻辑功能,
例子中给request增加了一个myuser的属性.
- 上下文是给所有的模板增加变量
例子中给模板增加了一个myuser的变量.