def get(self, request, category_id, page_num): # category_id表示第三级分类的编号 # page_num表示第n页数据 # 查询分类数据 categories = get_categories() # 查询第三级分类对象 cat3 = GoodsCategory.objects.get(pk=category_id) breadcrumb = get_breadcrumb(cat3) # 排序规则 sort = request.GET.get('sort', 'default') if sort == 'default': sort_field = '-sales' elif sort == 'price': sort_field = 'price' elif sort == 'hot': sort_field = '-comments' else: sort_field = '-sales' # 热销排行:通过另外一个视图实现 # 查询当前页的商品数据 # 1.查询指定分类的数据 skus = SKU.objects.filter(category_id=category_id, is_launched=True).order_by(sort_field) # 2.分页 # 2.1创建分页对象,指定列表、页大小 paginator = Paginator(skus, constants.SKU_LIST_PER_PAGE) # 2.2获取指定页码的数据 page_skus = paginator.page(page_num) # 2.3获取总页数 total_page = paginator.num_pages context = { 'categories': categories, 'breadcrumb': breadcrumb, 'category': cat3, 'page_skus': page_skus, 'page_num': page_num, 'total_page': total_page, 'sort': sort } return render(request, 'list.html', context)
def get(self, request): #查询分类 categories = get_categories() # 查询广告数据 content_category_list = ContentCategory.objects.all() # 构造广告字典 ''' {广告位标识:[广告1,....]} ''' contents = {} for content_category in content_category_list: contents[content_category. key] = content_category.content_set.order_by('sequence') context = {'categories': categories, 'contents': contents} return render(request, 'index.html', context=context)
def generate_index_html(): # 1.生成html # 查询分类 categories = get_categories() # 查询广告数据 content_category_list = ContentCategory.objects.all() # 构造广告字典 ''' {广告位标识:[广告1,....]} ''' contents = {} for content_category in content_category_list: contents[content_category.key] = content_category.content_set.order_by( 'sequence') context = {'categories': categories, 'contents': contents} response = render(None, 'index.html', context=context) html_str = response.content.decode() # 写文件 with open(os.path.join(settings.BASE_DIR, 'static/index.html'), 'w') as f: f.write(html_str)
def get(self, request, sku_id): try: sku = SKU.objects.get(pk=sku_id) except: return http.Http404('商品编号无效') # 分类数据 categories = get_categories() # 获取面包屑导航 breadcrumb = get_breadcrumb(sku.category) # 获取spu spu = sku.spu # 获取规格信息:sku===>spu==>specs specs = spu.specs.order_by('id') # 查询所有的sku,如华为P10的所有库存商品 skus = spu.skus.order_by('id') ''' { 选项:sku_id } 说明:键的元组中,规格的索引是固定的 示例数据如下: { (1,3):1, (2,3):2, (1,4):3, (2,4):4 } ''' sku_options = {} sku_option = [] for sku1 in skus: infos = sku1.specs.order_by('spec_id') option_key = [] for info in infos: option_key.append(info.option_id) # 获取当前商品的规格信息 if sku.id == sku1.id: sku_option.append(info.option_id) sku_options[tuple(option_key)] = sku1.id # 遍历当前spu所有的规格 specs_list = [] for index, spec in enumerate(specs): option_list = [] for option in spec.options.all(): # 如果当前商品为蓝、64,则列表为[2,3] sku_option_temp = sku_option[:] # 替换对应索引的元素:规格的索引是固定的[1,3] sku_option_temp[index] = option.id # 为选项添加sku_id属性,用于在html中输出链接 option.sku_id = sku_options.get(tuple(sku_option_temp), 0) # 添加选项对象 option_list.append(option) # 为规格对象添加选项列表 spec.option_list = option_list # 重新构造规格数据 specs_list.append(spec) context = { 'sku': sku, 'categories': categories, 'breadcrumb': breadcrumb, 'category_id': sku.category_id, 'spu': spu, 'specs': specs_list } return render(request, 'detail.html', context)
def get_detail_html(sku_id): # 获取当前sku对象 sku = SKU.objects.get(id=sku_id) # 分类数据 categories = get_categories() # 获取面包屑导航 breadcrumb = get_breadcrumb(sku.category) # 获取spu spu = sku.spu # 获取规格信息:sku===>spu==>specs specs = spu.specs.order_by('id') # 查询所有的sku,如华为P10的所有库存商品 skus = spu.skus.order_by('id') ''' { 选项:sku_id } 说明:键的元组中,规格的索引是固定的 示例数据如下: { (1,3):1, (2,3):2, (1,4):3, (2,4):4 } ''' sku_options = {} sku_option = [] for sku1 in skus: infos = sku1.specs.order_by('spec_id') option_key = [] for info in infos: option_key.append(info.option_id) # 获取当前商品的规格信息 if sku.id == sku1.id: sku_option.append(info.option_id) sku_options[tuple(option_key)] = sku1.id # 遍历当前spu所有的规格 specs_list = [] for index, spec in enumerate(specs): option_list = [] for option in spec.options.all(): # 如果当前商品为蓝、64,则列表为[2,3] sku_option_temp = sku_option[:] # 替换对应索引的元素:规格的索引是固定的[1,3] sku_option_temp[index] = option.id # 为选项添加sku_id属性,用于在html中输出链接 option.sku_id = sku_options.get(tuple(sku_option_temp), 0) # 添加选项对象 option_list.append(option) # 为规格对象添加选项列表 spec.option_list = option_list # 重新构造规格数据 specs_list.append(spec) context = { 'sku': sku, 'categories': categories, 'breadcrumb': breadcrumb, 'category_id': sku.category_id, 'spu': spu, 'specs': specs_list } response = render(None, 'detail.html', context) file_name = os.path.join(settings.BASE_DIR, 'static/detail/%d.html' % sku.id) # 写文件 with open(file_name, 'w') as f1: f1.write(response.content.decode())