一、商品详情页
商品详情页依然采用叶敏静态化处理商品详情页的静态化有运营人员在编辑商品信息时触发生成静态化页面。
1.实现静态化异步任务:
在celery_tasks中新建html/tesks.py任务:
# meiduo_mall/celery_tasks/html/task.py
@ celery_app.task(name='generate_static_sku_detail_html')
def generate_static_sku_detail_html(sku_id):
"""
生成静态商品详情页面
:param sku_id: 商品sku_id
:return:
"""
# 商品分类信息
categories = get_categories()
# 获取当前sku的信息
sku = SKU.objects.filter(id=sku_id)
sku.images = sku.skuimage_set.all()
# 面包屑导航信息中的频道
goods = sku.goods
goods.channel = goods.category1.goodschannel_set.all()[0]
# 构建当前商品的规格键
# sku_key = [规格1参数id, 规格2参数id, 规格3参数id, ...]
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
key = []
for spec in s_specs:
key.append(spec)
# 向规格参数-sku字典添加数据
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)
美多商城-商品详情
欢迎来到美多商城!
欢迎您:[[ username ]]
|
退出
登录
|
注册
|
用户中心
|
我的购物车
|
我的订单
索尼微单
优惠15元
美妆个护
买2免1
我的购物车
15
商品名称手机
4
商品名称手机
5
商品名称手机
6
商品名称手机
6
商品分类
{% for group in categories.values %}
{% for channel in group.channels %}
|