商品列表页在哪?
- 当我们进行首页的时候,点击三级分类的 第三级分类,就会进入该商品的 列表页。对应所有商品。
- 我们数据库中只有手机的数据,所以默认点击手机
- 下面就是对列表页的业务进行分析与实现:
面包屑导航
就是一级级的显示当前的位置。
- 我们知道存储三级分类的表为自关联表,所以直接上代码
def get_breadcrumb(cat3):
# 面包屑导航,传递三级分类的对象
cat2 = cat3.parent
cat1 = cat2.parent # 通过外键,从三级分类找到对应的一级分类
breadcrumb = {
'cat1': {
'url': cat1.channels.all()[0],
# 这里其实GoodsCategory, 和 GoodsChannel 类是一对一 ,但是定义的是外键 Foreignkey,所以语法上属于一类查多类,就需要用到这些 .all()[0]
'name': cat1.name
},
'cat2': cat2,
'cat3': cat3
}
return breadcrumb
列表页分页和排序
- 排序:
- 这个简单,(1)我们默认按照商品创建的时间排序
- (2)按照商品价格由低到高排序
- (3)按照商品销量由低到高排序
- 实现起来只需要一个参数控制即可:
- url/?sort=default, 通过sort参数传递的值,进行判断何种排序
- 分页:
- 默认一页五条数据(因为数据库中数据较少)
- 实现,我们使用 分页器:官方文档
按照这个,对我们查询出来的数据进行分页即可;
例子太详细了,我就不上源代码了。
热销排行
当前列表页中数所有商品数据,我们需要向 用户展示销量前几的产品,帮助他们选择;
- 请求地址 /hot/(?P<category_id>\d+)/
- 我们只需要这个三级分类的id值
- 有了这个id值,我们就可以找到销量前几的商品,返回其数据了。
skus = models.SKU.objects.filter(category_id=category_id, is_launched=True).order_by('-sales')[:2]
好了,到这里就结束了,我们不去上具体的代码实现了。太繁琐了,思路都在这里,不能去死记硬看代码。
over!