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}}
posted @ 2020-02-28 20:42  紫月蓝风  阅读(470)  评论(0编辑  收藏  举报