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)
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})
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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('写入成功')
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)
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)