def generate_static_sku_detail_html(sku_id):
    """
    生成静态商品详情页面
    :param sku_id: 商品sku id
    """
    # 获取当前sku的信息
    sku = models.SKU.objects.get(id=sku_id)

    # 查询商品频道分类
    categories = get_categories()
    # 查询面包屑导航
    breadcrumb = get_breadcrumb(sku.category)

    # 构建当前商品的规格键
    goods_specs = get_goods_specs(sku)

    # 上下文
    context = {
        'categories': categories,
        'breadcrumb': breadcrumb,
        'sku': sku,
        'specs': goods_specs,
    }

    template = loader.get_template('detail.html')
    html_text = template.render(context)
    file_path = os.path.join(os.path.dirname(settings.BASE_DIR),
                             'front_end_pc/goods/' + str(sku_id) + '.html')
    with open(file_path, 'w') as f:
        f.write(html_text)
示例#2
0
    def get(self,request,category_id):
        ordering=request.GET.get('ordering')
        page_size=request.GET.get('page_size')
        page=request.GET.get('page')
        try:
            category=GoodsCategory.objects.get(id=category_id)
        except GoodsCategory .DoesNotExist:
            return JsonResponse({'code':400,'errmsg':'参数缺失'})

        breadcrumb=get_categories(category)
        skus=SKU.objects.filter(category=category,is_launched=True).order_by(ordering)
        from django.core.paginator import Paginator
        paginator=Paginator(skus,per_page=page_size)
        page_skus=paginator.page(page)
        sku_list=[]

        for sku in page_skus.object_list:
            sku_list.append({
                'id':sku.id,
                'default_image_url':sku.default_image.url,
                'name':sku.name,
                'price':sku.price
            })

        total_num= paginator.num_pages

        return JsonResponse({'code':0,'errmsg':'OK','list':sku_list,'count':total_num,'breadcrumb':breadcrumb})
示例#3
0
def generic_meiduo_index():
    print('--------------%s-------------' % time.ctime())
    categories = get_categories()
    # 2.广告数据
    contents = {}
    content_categories = ContentCategory.objects.all()
    for cat in content_categories:
        contents[cat.key] = cat.content_set.filter(
            status=True).order_by('sequence')

    # 我们的首页 后边会讲解页面静态化
    # 我们把数据 传递 给 模板
    context = {
        'categories': categories,
        'contents': contents,
    }

    from django.template import loader
    index_template = loader.get_template('index.html')

    index_html_data = index_template.render(context)
    from meiduo import settings
    import os

    file_path = os.path.join(
        os.path.dirname(settings.BASE_DIR, 'front_end_pc/index.html'))

    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(index_html_data)
示例#4
0
def generate_static_list_search_html():
    categories=get_categories()
    context={
        'categories':categories
    }
    #设置模板
    tempalte=loader.get_template('list.html')
    #给模板填充数据

    html_text=tempalte.render(context)
    #保存到路径里面去
    file_path=os.path.join(settings.GENERATED_STATIC_HTML_FILES_DIR,'list.html')
    with open(file_path,'w') as f:
        f.write(html_text)
示例#5
0
def generate_static_list_search_html():
    '''生成静态的商品列表html'''

    #获取商品类型
    categories = get_categories()
    context = {'categories': categories}
    #加载前端模板
    template = loader.get_template('list.html')
    # 数据写入模板
    html_text = template.render(context)
    # 复制模板到前端
    file_path = os.path.join(settings.GENERATED_STATIC_HTML_FILES_DIR,
                             'list.html')
    with open(file_path, 'w') as f:
        f.write(html_text)
示例#6
0
    def get(self, request):
        """提供首页广告界面"""
        # 查询商品频道和分类
        categories = get_categories()
        # 广告数据
        contents = {}
        content_categories = ContentCategory.objects.all()
        for cat in content_categories:
            contents[cat.key] = cat.content_set.filter(status=True).order_by('sequence')

        # 渲染模板的上下文
        context = {
            'categories': categories,
            'contents': contents,
        }
        return render(request, 'index.html', context)
示例#7
0
    def get(self,request,sku_id):
        try:
            sku=SKU.objects.get(id=sku_id)
        except SKU.DoesNotExist:
            pass
        categories=get_categories()
        breadcrumb=get_breadcrumb(sku.category)
        goods_specs=get_goods_specs(sku)
        context={
            'categories': categories,
            'breadcrumb': breadcrumb,
            'sku': sku,
            'specs':goods_specs,
        }

        return render(request,'detail.html',context)
示例#8
0
def generate_static_list_search_html():
    """
    生成静态的商品列表页html文件
    """
    # 商品分类菜单
    categories = get_categories()

    # 渲染模板,生成静态html文件
    context = {
        'categories': categories,
    }

    template = loader.get_template('list.html')
    html_text = template.render(context)
    file_path = os.path.join(settings.GENERATED_STATIC_HTML_FILES_DIR, 'list.html')
    with open(file_path, 'w') as f:
        f.write(html_text)
示例#9
0
 def get(self, request):
     """
     1. 获取分类数据
     2. 获取首页数据
     3. 组织数据 进行渲染
     :param request:
     :return:
     """
     # 1. 获取分类数据
     categories = get_categories()
     # 2. 获取首页数据
     contents = get_contents()
     # 3. 组织数据 进行渲染
     # 注意: key必须是这2个 因为模板中已经写死
     context = {
         'categories': categories,
         'contents': contents
     }
     return render(request, 'index.html', context)
示例#10
0
def generate_static_index_html():
    """
        生成静态的主页html文件
        """
    print('%s: generate_static_index_html' % time.ctime())

    categories = get_categories()
    contents = get_contents()

    context = {'categories': categories, 'contents': contents}

    # 获取首页模板文件
    template = loader.get_template('index.html')
    # 渲染首页html字符串
    html_text = template.render(context)
    # 将首页html字符串写入到指定目录,命名'index.html'
    file_path = os.path.join(os.path.dirname(settings.BASE_DIR),
                             'front_end_pc/index.html')
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(html_text)
示例#11
0
    def get(self, request, sku_id):
        """
        1. 获取商品id
        2. 根据商品id查询商品信息
        3. 获取分类数据
        4. 获取面包屑数据
        5. 获取规格和规格选项数据
        6. 组织数据,进行HTML模板渲染
        7. 返回响应
        :param request:
        :param sku_id:
        :return:
        """
        # 1. 获取商品id
        # 2. 根据商品id查询商品信息
        try:
            sku = SKU.objects.get(id=sku_id)
        except SKU.DoesNotExist:
            return JsonResponse({'code': 400, 'errmsg': '没有此商品'})
        # 3. 获取分类数据
        categories = get_categories()
        # 4. 获取面包屑数据
        # sku 有 三级分类属性
        breadcrumb = get_breadcrumb(sku.category)
        # 5. 获取规格和规格选项数据
        # 传递 sku对象
        specs = get_goods_specs(sku)

        # 6. 组织数据,进行HTML模板渲染
        # context 的key 必须按照课件来!!!
        # 因为模板已经写死了
        context = {
            'sku': sku,
            'categories': categories,
            'breadcrumb': breadcrumb,
            'specs': specs
        }

        # 7. 返回响应
        return render(request, 'detail.html', context)
示例#12
0
def generic_detail_html(sku):
    # try:
    #     sku=SKU.objects.get(id=sku_id)
    # except SKU.DoesNotExist:
    #     pass
    categories = get_categories()
    breadcrumb = get_breadcrumb(sku.category)
    goods_specs = get_goods_specs(sku)
    context = {
        'categories': categories,
        'breadcrumb': breadcrumb,
        'sku': sku,
        'specs': goods_specs,
    }
    import os
    from meiduo import settings
    from django.template import loader
    detail_template = loader.get_template('detail.html')

    detail_html_data = detail_template.render(context)
    file_path = os.path.join(os.path.dirname(settings.BASE_DIR),
                             'front_end_pc/goods/%s.html' % sku.id)
示例#13
0
    def get(self,request):

        """
        首页的数据分为2部分
        1部分是 商品分类数据
        2部分是 广告数据

        """
        # 1.商品分类数据
        categories=get_categories()
        # 2.广告数据
        contents = {}
        content_categories = ContentCategory.objects.all()
        for cat in content_categories:
            contents[cat.key] = cat.content_set.filter(status=True).order_by('sequence')

        # 我们的首页 后边会讲解页面静态化
        # 我们把数据 传递 给 模板
        context = {
            'categories': categories,
            'contents': contents,
        }
        return render(request,'index.html',context)
示例#14
0
def generate_static_index_html():
    """
        生成静态的主页html文件
        """
    print('%s: generate_static_index_html' % time.ctime())

    categories = get_categories()
    contents = get_contents()

    context = {'categories': categories, 'contents': contents}

    print('12111111111111111111111111111111111111')

    template = loader.get_template('index.html')

    print('2222222222222222222222222222')
    html_text = template.render(context)

    print('333333333333333333333333333')
    file_path = os.path.join(os.path.dirname(settings.BASE_DIR),
                             'front_end_pc/index.html')
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(html_text)
    print('写入成功')
示例#15
0
def generate_static_sku_detail_html(sku_id):
    # 获取分类数据
    categories = get_categories()
    # 获取当前商品数据
    sku = SKU.objects.get(id=sku_id)
    sku.images = sku.skuimage_set.all()
    # 获取面包屑数据
    goods = sku.goods
    goods.channel = goods.category1.goodschannel_set.all()[0]

    # 获取商品规格项ids
    sku_key = []
    sku_specs = sku.skuspecification_set.order_by('spec_id')
    for sku_spec in sku_specs:
        sku_key.append(sku_spec.option.id)

    # 构建商品规格
    # 获取所有商品,
    skus = goods.sku_set.all()
    # 构建不同规格参数(选项)的sku字典
    # spec_sku_map = {
    #     (规格1参数id, 规格2参数id, 规格3参数id, ...): sku_id,
    #     (规格1参数id, 规格2参数id, 规格3参数id, ...): sku_id,
    #     ...
    # }
    spec_sku_map = {}
    for s in skus:

        s_peces = sku.skuspecification_set.order_by('spec_id')
        # 用于记录 规格参数id
        key = []
        for spec in s_peces:
            key.append(spec.option.id)

        # 添加数据
        spec_sku_map[tuple(key)] = s.id

    # 获取当前商品的规格信息
    # specs = [
    #    {
    #        'name': '屏幕尺寸',
    #        'options': [
    #            {'value': '13.3寸', 'sku_id': xxx},
    #            {'value': '15.4寸', 'sku_id': xxx},
    #        ]
    #    },
    #    {
    #        'name': '颜色',
    #        'options': [
    #            {'value': '银色', 'sku_id': xxx},
    #            {'value': '黑色', 'sku_id': xxx}
    #        ]
    #    },
    #    ...
    # ]

    specs = goods.goodsspecification_set.order_by('id')
    # 若当前sku的规格信息不完整,则不再继续
    if len(sku_key) < len(specs):
        return

    # 针对于商品数据进行遍历
    for index, spec in enumerate(specs):
        # 复制当前sku的规格键
        key = sku_key[:]
        # 该规格的选项
        options = spec.specificationoption_set.all()
        for option in options:
            # 在规格参数sku字典中查询符合当前规则的sku
            key[index] = option.id
            option.sku_id = spec_sku_map.get(tuple(key))

        spec.options = options

    # 组织上下文
    context = {
        'categories': categories,
        'goods': goods,
        'specs': specs,
        'sku': sku
    }
    # 2. 加载模板
    template = loader.get_template('detail.html')
    #2.1 将数据传递给模板
    html_text = template.render(context)
    #3. 写入到指定文件
    file_path = os.path.join(settings.GENERATED_STATIC_HTML_FILES_DIR,
                             'goods/' + str(sku_id) + '.html')
    with open(file_path, 'w') as f:
        f.write(html_text)
def generate_static_sku_detail_html(sku_id):
    """生成静态商品详情页面"""

    # 商品分类菜单
    categories = get_categories()

    # 获取当前sku的信息
    sku = SKU.objects.get(id=sku_id)
    sku.images = sku.skuimage_set.all()

    # 面包屑导航信息中的频道
    goods = sku.goods
    goods.channel = goods.category1.goodschannel_set.all()[0]

    # 构建当前商品的规格键
    sku_specs = sku.skuspecification_set.order_by('spec_id')
    sku_key = []
    for spec in sku_specs:
        sku_key.append(spec.option.id)

    # 获取当前商品的所有SKU
    skus = goods.sku_set.all()

    # 构建不同规格参数(选项)的sku字典
    # spec_sku_map = {
    #     (规格1参数id, 规格2参数id, 规格3参数id, ...): sku_id,
    #     (规格1参数id, 规格2参数id, 规格3参数id, ...): sku_id,
    #     ...
    # }
    spec_sku_map = {}
    for s in skus:
        # 获取sku的规格参数
        s_specs = s.skuspecification_set.order_by('spec_id')
        # 用于形成规格参数-sku字典的键
        key = []
        for spec in s_specs:
            key.append(spec.option.id)
        # 向规格参数-sku字典添加记录
        spec_sku_map[tuple(key)] = s.id

    # 获取当前商品的规格信息
    specs = goods.goodsspecification_set.order_by('id')
    # 若当前sku的规格信息不完整,则不再继续
    if len(sku_key) < len(specs):
        return
    for index, spec in enumerate(specs):
        # 复制当前sku的规格键
        key = sku_key[:]
        # 该规格的选项
        options = spec.specificationoption_set.all()
        for option in options:
            # 在规格参数sku字典中查找符合当前规格的sku
            key[index] = option.id
            option.sku_id = spec_sku_map.get(tuple(key))

        spec.options = options

    # 渲染模板,生成静态html文件
    context = {
        'categories': categories,
        'goods': goods,
        'specs': specs,
        'sku': sku
    }

    template = loader.get_template('detail.html')
    html_text = template.render(context)
    file_path = os.path.join(settings.GENERATED_STATIC_HTML_FILES_DIR,
                             'goods/' + str(sku_id) + '.html')
    with open(file_path, 'w') as f:
        f.write(html_text)
示例#17
0
文件: crons.py 项目: py-king/123
def generate_static_index_html():
    """
    生成静态的主页html
    """

    print('%s:generate_static_index' % time.ctime())
    # 商品频道及分类菜单
    # 使用有序字典保存类别的顺序
    # categories = {
    #     1: { # 组1
    #         'channels': [{'id':, 'name':, 'url':},{}, {}...],
    #         'sub_cats': [{'id':, 'name':, 'sub_cats':[{},{}]}, {}, {}, ..]
    #     },
    #     2: { # 组2
    #
    #     }
    # }
    '''
    #此部分代码抽取到utils/goods.py
    # 初始化存储容器
    categories = OrderedDict()
    # 获取一级分类
    channels = GoodsChannel.objects.order_by('group_id', 'sequence')

    # 对一级分类进行遍历
    for channel in channels:
        # 获取group_id
        group_id = channel.group_id
        # 判断group_id 是否在存储容器,如果不在就初始化
        if group_id not in categories:
            categories[group_id] = {
                'channels': [],
                'sub_cats': []
            }

        one = channel.category
        # 为channels填充数据
        categories[group_id]['channels'].append({
            'id': one.id,
            'name': one.name,
            'url': channel.url
        })
        # 为sub_cats填充数据
        for two in one.goodscategory_set.all():
            # 初始化 容器
            two.sub_cats = []
            # 遍历获取
            for three in two.goodscategory_set.all():
                two.sub_cats.append(three)

            # 组织数据
            categories[group_id]['sub_cats'].append(two)
    '''
    from utils.goods import get_categories
    categories = get_categories()

    # 广告和首页数据
    contents = {}
    content_categories = ContentCategory.objects.all()
    # content_categories = [{'name':xx , 'key': 'index_new'}, {}, {}]
    # {
    #    'index_new': [] ,
    #    'index_lbt': []
    # }
    for cat in content_categories:
        contents[cat.key] = cat.content_set.filter(
            status=True).order_by('sequence')

    context = {'categories': categories, 'contents': contents}

    template = loader.get_template('index.html')
    html_data = template.render(context)

    #将文件写入
    file_path = os.path.join(settings.GENERATED_STATIC_HTML_FILES_DIR,
                             'index.html')
    with open(file_path, 'w') as f:
        f.write(html_data)