电商购物商城项目商品详情页设置

简介: 电商购物商城项目商品详情页设置

电商项目商品详情页

对于商品详情页的视图大致思路

  1. 我们在点击商品进入详情页的过程中 , 浏览器会向服务端发送请求 , 我们可以是这个请求携带一个参数 , 也就是该商品的ID
  2. 在获取到商品的ID后 , 我们就可以在后端编写 , 通过这个ID 从数据库中拿到相应的数据 , 返回在前端页面中

设置路由

re_path('^detail/(?P<sku_id>\d+)/$' , views.DetailView.as_view() , name='detail'),

视图

# 详情页数据
class DetailView(View):
    '''
    商品详情页
    '''
    def get(self , request , sku_id):
        categories = get_category()
        sku = SKU.objects.get(id=sku_id)
        breadcrumb = get_breadcrumb(sku.category)
        # 通过 sku.id 获取商品对象的对应规格信息的选项
        sku_specs = SKUSpecification.objects.filter(sku_id=sku_id).order_by('spec_id')
        # 创建一个空的列表 用来存储当前 sku 对应的规格选项数据
        sku_key = []
        # 遍历当前 sku 的规格选项
        for spec in sku_specs:
            # 将每个规格选项的 ID 添加到 sku_key 列表中
            sku_key.append(spec.option.id)
        # [8, 11]  颜色:金色 ,内存:64GB
        # [1, 4, 7]  屏幕尺寸:13.3英寸 颜色:银色 ,内存:core i5/8G内存/512G存储
        # 获取当前商品的所有 sku
        # 保证选择不同的规格的情况下 , 商品不变
        spu_id = sku.spu_id
        spu = SPU.objects.get(id=spu_id)
        skus = SKU.objects.filter(spu_id=spu_id)
        # 构建商品的不同规格参数,sku的选项字段
        spec_sku_map = {}
        for i in skus:
            # 获取sku规格的参数
            s_pecs = i.specs.order_by('spec_id')
            # 创建一个空列表 , 用于存储 sku 规格参数
            key = []
            # 遍历当前 sku 规格参数列表
            for spec in s_pecs:
                key.append(spec.option.id)
            spec_sku_map[tuple(key)] = i.id
        # 获取当前商品的规格名称
        # 根据商品的 ID 获取当前商品的所有规格名称
        goods_specs = SPUSpecification.objects.filter(spu_id=spu_id).order_by('id')
        # 前端渲染
        # 实现根据规格选项生成对应 sku.id, 更新规格对象个规格选项信息。
        # 为了给用户展示所有的规格参数
        for index , spec in enumerate(goods_specs):
            # 复制 sku_key 列表中的数据,避免直接 sku_key 列表中的内容
            key = sku_key[:]
            # 获取当前 specs 对象的规格名称
            spec_options = spec.options.all()
            # 遍历当前商品的规格名称
            for spec_option in spec_options:
                # 将当前规格选项对象 spec_option 的 id 赋值给 key列表中 index 的位置,用于查询对应 sku 参数内容
                key[index] = spec_option.id
                # 根据列表中的值, 在 spec_sku_map 字典中查询对应的 sku 数据
                spec_option.sku_id = spec_sku_map.get(tuple(key))
            # 更新每个规格对象的选项内容
            spec.spec_options = spec_options
        context = {
            'categories' : categories,
            'breadcrumb' : breadcrumb,
            'sku':sku,
            'specs' : goods_specs,
            'spu' : spu
        }
        return render(request , 'detail.html' , context=context)

修改前段

{% for group in categories.values %}
                        <li>
                            <div class="level1">
                                {% for channel in group.channels %}
                                    <a href="{{ channel.url }}">{{ channel.name }}</a>
                                {% endfor %}
                            </div>
                            <div class="level2">
                                {% for cat2 in group.sub_cats %}
                                    <div class="list_group">
                                        <div class="group_name fl">{{ cat2.name }} &gt;</div>
                                        <div class="group_detail fl">
                                            {% for cat3 in cat2.sub_cat %}
                                                <a href="/list/{{ cat3.id }}/1/">{{ cat3.name }}</a>
                                            {% endfor %}
                                        </div>
                                    </div>
                                {% endfor %}
                            </div>
                        </li>
                    {% endfor %}
{% for spec in specs %}
                <div class="type_select">
                    <label>{{ spec.name }}:</label>
                    {% for option in spec.spec_options %}
                        {% if option.sku_id == sku.id %}
                            <a href="javascript:;" class="select">{{ option.value }}</a>
                        {% elif option.sku_id %}
                            <a href="{% url 'detail' option.sku_id %}">{{ option.value }}</a>
                        {% else %}
                            <a href="javascript:;">{{ option.value }}</a>
                        {% endif %}
                    {% endfor %}
                </div>
            {% endfor %}

在这整个过程中最大的问题就是 , 各种表关系之前的查询 , 以及规格的选择

电商项目商品详情页

对于商品详情页的视图大致思路

  1. 我们在点击商品进入详情页的过程中 , 浏览器会向服务端发送请求 , 我们可以是这个请求携带一个参数 , 也就是该商品的ID
  2. 在获取到商品的ID后 , 我们就可以在后端编写 , 通过这个ID 从数据库中拿到相应的数据 , 返回在前端页面中

设置路由

re_path('^detail/(?P<sku_id>\d+)/$' , views.DetailView.as_view() , name='detail'),

视图

# 详情页数据
class DetailView(View):
    '''
    商品详情页
    '''
    def get(self , request , sku_id):
        categories = get_category()
        sku = SKU.objects.get(id=sku_id)
        breadcrumb = get_breadcrumb(sku.category)
        # 通过 sku.id 获取商品对象的对应规格信息的选项
        sku_specs = SKUSpecification.objects.filter(sku_id=sku_id).order_by('spec_id')
        # 创建一个空的列表 用来存储当前 sku 对应的规格选项数据
        sku_key = []
        # 遍历当前 sku 的规格选项
        for spec in sku_specs:
            # 将每个规格选项的 ID 添加到 sku_key 列表中
            sku_key.append(spec.option.id)
        # [8, 11]  颜色:金色 ,内存:64GB
        # [1, 4, 7]  屏幕尺寸:13.3英寸 颜色:银色 ,内存:core i5/8G内存/512G存储
        # 获取当前商品的所有 sku
        # 保证选择不同的规格的情况下 , 商品不变
        spu_id = sku.spu_id
        spu = SPU.objects.get(id=spu_id)
        skus = SKU.objects.filter(spu_id=spu_id)
        # 构建商品的不同规格参数,sku的选项字段
        spec_sku_map = {}
        for i in skus:
            # 获取sku规格的参数
            s_pecs = i.specs.order_by('spec_id')
            # 创建一个空列表 , 用于存储 sku 规格参数
            key = []
            # 遍历当前 sku 规格参数列表
            for spec in s_pecs:
                key.append(spec.option.id)
            spec_sku_map[tuple(key)] = i.id
        # 获取当前商品的规格名称
        # 根据商品的 ID 获取当前商品的所有规格名称
        goods_specs = SPUSpecification.objects.filter(spu_id=spu_id).order_by('id')
        # 前端渲染
        # 实现根据规格选项生成对应 sku.id, 更新规格对象个规格选项信息。
        # 为了给用户展示所有的规格参数
        for index , spec in enumerate(goods_specs):
            # 复制 sku_key 列表中的数据,避免直接 sku_key 列表中的内容
            key = sku_key[:]
            # 获取当前 specs 对象的规格名称
            spec_options = spec.options.all()
            # 遍历当前商品的规格名称
            for spec_option in spec_options:
                # 将当前规格选项对象 spec_option 的 id 赋值给 key列表中 index 的位置,用于查询对应 sku 参数内容
                key[index] = spec_option.id
                # 根据列表中的值, 在 spec_sku_map 字典中查询对应的 sku 数据
                spec_option.sku_id = spec_sku_map.get(tuple(key))
            # 更新每个规格对象的选项内容
            spec.spec_options = spec_options
        context = {
            'categories' : categories,
            'breadcrumb' : breadcrumb,
            'sku':sku,
            'specs' : goods_specs,
            'spu' : spu
        }
        return render(request , 'detail.html' , context=context)

修改前段

{% for group in categories.values %}
                        <li>
                            <div class="level1">
                                {% for channel in group.channels %}
                                    <a href="{{ channel.url }}">{{ channel.name }}</a>
                                {% endfor %}
                            </div>
                            <div class="level2">
                                {% for cat2 in group.sub_cats %}
                                    <div class="list_group">
                                        <div class="group_name fl">{{ cat2.name }} &gt;</div>
                                        <div class="group_detail fl">
                                            {% for cat3 in cat2.sub_cat %}
                                                <a href="/list/{{ cat3.id }}/1/">{{ cat3.name }}</a>
                                            {% endfor %}
                                        </div>
                                    </div>
                                {% endfor %}
                            </div>
                        </li>
                    {% endfor %}
{% for spec in specs %}
                <div class="type_select">
                    <label>{{ spec.name }}:</label>
                    {% for option in spec.spec_options %}
                        {% if option.sku_id == sku.id %}
                            <a href="javascript:;" class="select">{{ option.value }}</a>
                        {% elif option.sku_id %}
                            <a href="{% url 'detail' option.sku_id %}">{{ option.value }}</a>
                        {% else %}
                            <a href="javascript:;">{{ option.value }}</a>
                        {% endif %}
                    {% endfor %}
                </div>
            {% endfor %}

在这整个过程中最大的问题就是 , 各种表关系之前的查询 , 以及规格的选择

如上图该商品对应的有规格和颜色 , 不同规格颜色应该是不同的商品才对 , 如黑色蓝色 , 每次在点击选择后就会更新到另一个商品 , 也就是说不仅仅需要从数据库中拿到数据 , 还需要设置更新 , 其中这部分的数据表结构也相当复杂 , 后面我会对表结构进行阐述

如上图该商品对应的有规格和颜色 , 不同规格颜色应该是不同的商品才对 , 如黑色蓝色 , 每次在点击选择后就会更新到另一个商品 , 也就是说不仅仅需要从数据库中拿到数据 , 还需要设置更新 , 其中这部分的数据表结构也相当复杂 , 后面我会对表结构进行阐述

相关文章
|
1月前
|
存储 Java API
淘宝拍立淘图片搜索接口:轻松找到同款商品!
淘宝拍立淘图片搜索接口:轻松找到同款商品!
121 0
|
9月前
|
XML JSON API
淘宝天猫API接入说明(淘宝天猫商品详情+关键词搜索商品列表)商品详情数据,商品sku数据,商品优惠券数据
业务场景:作为全球最大的 B2C 电子商务平台之一,淘宝天猫平台提供了丰富的商品资源,吸引了大量的全球买家和卖家。为了方便开发者接入淘宝天猫平台,淘宝天猫平台提供了丰富的 API 接口,其中历史价格接口是非常重要的一部分。大家有探讨稳定采集淘宝(天猫)京东阿里拼多多等平台整站实时商品详情历史价格数据接口,通过该接口开发者可以更好地了解商品的情况,商品详情数据详细信息查询,数据参数包括:商品链接,商品列表主图、价格、标题,sku,库存,销量,店铺昵称,店铺等级,商品详情SKU属性,商品视频,商品优惠券,促销信息,详情属性描述,宝贝ID,区域ID,发货地,发货至,快递费用,物流费用等页面上有的数据
|
17天前
|
监控 供应链 搜索推荐
数据驱动电商:深度利用淘宝API接口掌握商品详情
本文探讨了如何利用淘宝API接口获取商品详情数据以助力电商决策。通过API,商家能获取商品标题、价格、库存等信息,从而进行市场分析、库存优化、定价策略制定及个性化推荐。步骤包括注册获取API权限、理解文档、构建数据收集流程、处理分析数据以及应用结果。示例代码展示了如何用Python调用API获取商品详情。善用API和数据驱动策略可在电商市场中取得优势。请注意遵循淘宝的API使用规范。
|
16天前
|
数据库
电商购物系统首页的商品分类
电商购物系统首页的商品分类
|
16天前
|
Python
电商购物商城项目商品表结构介绍
电商购物商城项目商品表结构介绍
|
1月前
|
监控 数据挖掘 API
淘宝商品详情数据(商品分析,竞品分析,代购商城建站与跨境电商,ERP系统商品数据选品)
淘宝商品详情数据在多个业务场景中发挥着关键作用,以下是一些主要的应用场景
|
1月前
|
前端开发 Java API
淘系接口推荐:淘宝图片搜索商品数据接口,轻松获取相似商品
淘系接口推荐:淘宝图片搜索商品数据接口,轻松获取相似商品
129 6
|
1月前
|
监控 供应链 搜索推荐
淘宝 1688 京东商品详情数据场景,自营商城上货,价格监控,竞品分析等
淘宝、1688、京东商品详情数据在各自的电商平台上具有广泛的应用场景,自营商城上货、价格监控以及竞品分析则是电商领域的关键环节。这些要素共同构成了电商运营的完整链条,为商家提供了丰富的数据支持和策略选择。
|
10月前
|
SQL 存储 前端开发
商品热销排行【项目 商城】
商品热销排行【项目 商城】
31 0
|
1月前
|
存储 JSON 数据挖掘
如何通过京东工业商品API接口获取商品详情
京东工业是一个专注于工业品采购和销售的电商平台,为工业领域的用户提供了一站式的采购解决方案。为了方便工业品供应商和开发者获取商品详情,京东工业提供了商品API接口。本文将详细介绍如何通过京东工业商品API接口来获取商品详情,并提供相应的代码示例。