【愚公系列】2022年01月 Django商城项目 24-商品列表页功能实现

举报
愚公搬代码 发表于 2022/01/31 22:22:52 2022/01/31
【摘要】 一、商品列表页功能实现 1.后台查询代码from django import httpfrom django.shortcuts import render# Create your views here.from django.views import Viewfrom app.contents.utils import get_categoriesfrom app.goods.mode...

一、商品列表页功能实现

1.后台查询代码

from django import http
from django.shortcuts import render

# Create your views here.
from django.views import View

from app.contents.utils import get_categories
from app.goods.models import SKU, GoodsCategory, GoodsVisitCount
from app.goods.utlis import get_breadcrumb
from utils.response_code import RETCODE

# Create your views here.
class ListView(View):

    def get(self,request,category_id,page_num):

        # 一.面包屑实现
        """
        我们需要根据当前的分类,来获取它的上级/下级信息

        """
        # ① 获取当前的分类
        try:
            category=GoodsCategory.objects.get(id=category_id)
        except Exception as e:
            logger.error(e)
            return render(request,'list.html',context={'errmsg':'没有此分类'})
        # ② 获取它的上级/下级
        # 如果是三级 3个信息
        # 如果是二级 2个信息
        # 如果是1级 1个信息
        breadcrumb=get_breadcrumb(category)

        # 二.列表数据

        # 1.如果有排序字段先排序
        sort = request.GET.get('sort')
        # sort = hot 人气 根据 销量排序
        # sort = price 价格 根据 价格排序
        # sort = default 默认 根据 create_time排序
        if sort == 'hot':
            order_filed = 'sales'
        elif sort == 'price':
            order_filed = 'price'
        else:
            order_filed='create_time'
            sort='default'

        # 2.根据分类id,把所有数据都查询出来
        skus = SKU.objects.filter(category_id=category_id, is_launched=True).order_by(order_filed)

        # 3.如果有分页字段再分页
        try:
            page_num=int(page_num)
        except Exception as e:
            page_num=0

        # 3.1 导入分页类
        from django.core.paginator import Paginator
        try:
            #3.2 创建分页实例
            paginator = Paginator(skus,per_page=5)
            #3.3 获取分页数据
            page_skus = paginator.page(page_num)
            #总页数
            total_page=paginator.num_pages
        except Exception as e:
            pass




        context = {
            'category':category,
            'breadcrumb':breadcrumb,
            'sort': sort,  # 排序字段
            'page_skus': page_skus,  # 分页后数据
            'total_page': total_page,  # 总页数
            'page_num': page_num,  # 当前页码
        }

        return render(request,'list.html',context=context)

二、面包屑信息展示

1.前台html代码

<div class="breadcrumb">
    <a href="javascript:;">{{ breadcrumb.cat1.name }}</a>
    <span>></span>
    <a href="javascript:;">{{ breadcrumb.cat2.name }}</a>
    <span>></span>
    <a href="javascript:;">{{ breadcrumb.cat3.name }}</a>
</div>

2.实际效果

在这里插入图片描述

三、列表页信息展示

1.前台html代码

<div class="r_wrap fr clearfix">
    <div class="sort_bar">
        <a href="{{ url('goods:list', args=(category.id, page_num)) }}?sort=default" {% if sort == 'default' %}class="active"{% endif %}>默认</a>
        <a href="{{ url('goods:list', args=(category.id, page_num)) }}?sort=price" {% if sort == 'price' %}class="active"{% endif %}>价格</a>
        <a href="{{ url('goods:list', args=(category.id, page_num)) }}?sort=hot" {% if sort == 'hot' %}class="active"{% endif %}>人气</a>
    </div>
    <ul class="goods_type_list clearfix">
        {% for sku in page_skus %}
        <li>
        <a href="detail.html"><img src="{{ sku.default_image.url }}"></a>
        <h4><a href="detail.html">{{ sku.name }}</a></h4>
        <div class="operate">
            <span class="price">{{ sku.price }}</span>
            <span class="unit"></span>
            <a href="#" class="add_goods" title="加入购物车"></a>
        </div>
        </li>
        {% endfor %}
    </ul>

    <div class="pagenation">
        <div id="pagination" class="page"></div>
    </div>
</div>

2.实际效果

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。