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 # ]
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', ], }, }, ]
实现首页,列表页相同部分 完成这些操作就可以在各页面中调用了,无需再重复设置