Django项目使用 context_processors 处理全局变量
项目的开发过程中,总是会使用一些公共信息显示在所有的页面,例如商城购物车的数量。这些数据来自数据库,且不同用户数据各部相同,可以采用 Django 的 context_processors
解决该问题,context_processors
会在模板渲染之前,先执行其中的内容,以达到获取数据的目的。
以购物车数量为例
- 新建
context_processors
文件
# project/app/context_processors.py
from .models import Cart
def cart_list(request):
"""这里写需要的全局变量,直接返回querydict,方便取数据"""
cart = Cart.objects.filter(user=request.user.id)
return {"cart": cart}
settings.py
中注册context_processors
# settings.py
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
"app_name.context_processors.cart_list" # 注册
],
},
},
]
- 这样就可以在所有的模板中使用
cart
变量啦
{{cart|length}}