django 首页和商品各列表页相同的部分的处理

9-27 首页,列表页相同部分处理

 

因为首页和商品各列表页具有相同的部分,每写一个列表页就要写一次代码吗,是不是有简单的办法呢?

1.我们来看下实现这种功能需要用到的代码

 1 def getMenu(request):#括号中的request不能删掉
 2     #把需要用到的表引用进来
 3     from shop.models import Floor,Classify
 4     #res是获取下方商品显示的楼层信息,通过外键进行查找和反向查找来显示商品信息
 5     res = Floor.objects.filter()
 6     #classify是获取上级id为0的第一级的信息,实现显示导航栏和一级分类
 7     classify = Classify.objects.filter(parent_id=0)
 8     #存储数据
 9     all_data = []
10     #显示一级分类下相关联的二级分类
11     for one_data in classify:
12         #获取二级分类数据
13         two_list = Classify.objects.filter(parent_id=one_data.id)
14         #存储二级分类的所有数据
15         two_lis = []
16         #对二级分类进行遍历,获取三级分类数据
17         for two_data in two_list:
18             #定义字典,存储二级分类的id,name,以及三级分类的数据(列表)
19             temp = {}
20             #获取二级分类ID
21             temp['id'] = two_data.id
22             #获取二级分类name
23             temp['name'] = two_data.name
24             #获取三级数据
25             three_data = Classify.objects.filter(parent_id=two_data.id)
26             #将三级数据存放到列表中
27             temp['list'] = three_data
28             #将二级分类放入字典
29             two_lis.append(temp)
30         #将字典添加到数组中
31         all_data.append(two_lis)
32     return {'res': res, 'classify': classify, 'all_data': all_data}
33 
34 # for two_list in list:
35     #       two_list.id two.list.name
36     #     for three_list in two_list.list:
37     #          three_list.id three_list.name
38     # 循环 types_list 取每一个分类的二级和三级
39 
40     # [
41     #   [ {id:34,name:'电视',list:[三级的数据]},{id:35,name:'空调',list:[三级的数据]},.... ],
42     #   [ {id:34,name:'手机通讯',list:[三级的数据]},{id:35,name:'运营商',list:[三级的数据]},..... ],
43     #    .......
44     # ]
View Code

2,在项目同名app下添加一个context_processor.py  的文件,将步骤1中的代码复制到此文件中

3,使用上下文处理器来完成这种功能,在setting.py 中添加myshop下的context_processor下的getMenu 函数

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',
                'myshop.context_processor.getMenu',
            ],
        },
    },
]

实现首页,列表页相同部分   完成这些操作就可以在各页面中调用了,无需再重复设置 

猜你喜欢

转载自www.cnblogs.com/zxg-1997/p/9715681.html