-
路由配置
url(r'^list/(?P<type_id>\d+)/(?P<page>\d+)$', ListView.as_view(), name='list'), # 列表页
-
视图函数, 还要导入分页模块
# 导入django分页类 from django.core.paginator import Paginator # 种类id 对应的页码 排序方式 # restful api-> 请求一种资源 # /list?type_id=种类的id&page=页码&sort=排序方式 # /list/种类id/页码/排序排序方式 # /list/种类id/页码?sort=排序方式 class ListView(View): '''列表页面''' def get(self, request, type_id, page): '''显示列表页''' # 获取种类的信息 try: type = GoodsType.objects.get(id=type_id) except GoodsType.DoesNotExist: # 种类不存在 return redirect(reverse('goods:index')) # 获取商品的分类信息 types = GoodsType.objects.all() # 获取排序的方式 # sort=default 按照默认id排序 # sort=price 按照商品价格排序 # sort=hot 按照商品的销量排序 sort = request.GET.get('sort') if sort == 'price': skus = GoodsSKU.objects.filter(type=type).order_by('price') elif sort == 'hot': skus = GoodsSKU.objects.filter(type=type).order_by('-sales') else: sort = 'default' skus = GoodsSKU.objects.filter(type=type).order_by('-id') # 对数据进行分页 # 第一个参数是可迭代对象 对二哥参数是每页显示的数据条数 paginator = Paginator(skus, 1) # 获取第page页的内容 try: page = int(page) except Exception as e: page = 1 # paginator.num_pages 显示总页数 if page > paginator.num_pages: page = 1 # 返回Page对象 这个对象包含了这一页的所有数据 # 获取第page页的Page实列对象 skus_page = paginator.page(page) # todo: 进行页码的控制, 页面上最多显示54个页码 # 1. 总页数小于5页, 页面上显示所有页码 # 2. 如果当前页是前3页, 显示1-5页 # 3. 如果当前页是后3页, 显示后5页 # 4.其他情况, 显示当前页的前2页, 当前页, 当前页的后两页 # paginator.num_pages 显示总页数 num_pages = paginator.num_pages if num_pages < 5: pages = range(1, num_pages+1) elif page <= 3: pages = range(1,6) elif num_pages - page <= 2: pages = range(num_pages-4, num_pages+1) else: pages = range(page-2, page+3) # 获取新品信息 # 就是获取同种类的信息 # 安创建时间降序排列 # 取两个 new_skus = GoodsSKU.objects.filter(type=type).order_by('-create_time')[:2] # 获取用户购物车商品的数目 # 拿到用户对象 user = request.user # 购物车商品数目 cart_count = 0 # 如果你使用is_authenticated()判断用户是否登录,那么意味着你采用了django的auth系统, if user.is_authenticated(): # 用户已登入 # 获取一个redis对象 参数是default 所以对应的是redis9好数据库 conn = get_redis_connection('default') # 构造哈希值 cart_key = 'cart_%d' % user.id # 把哈希值的键传入进去 得到商品数目(不包含个数 列苹果10个 草莓10个 这里只会显示2个) cart_count = conn.hlen(cart_key) # 构造上下文 context = { 'type':type, 'types':types, 'skus_page':skus_page, 'new_skus':new_skus, 'cart_count':cart_count, 'pages':pages, 'sort':sort } # 使用模板 return render(request, 'list.html', context)
-
模板
Django分页案例2
于 2019-05-07 18:46:10 首次发布