Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
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)
Пример #4
0
    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)
Пример #5
0
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())