视图函数vIEws.py
# 种类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 if page > paginator.num_pages: page = 1 # 获取第page页的Page实例对象 skus_page = paginator.page(page) # todo: 进行页码的控制,页面上最多显示5个页码 # 1.总页数小于5页,页面上显示所有页码 # 2.如果当前页是前3页,显示1-5页 # 3.如果当前页是后3页,显示后5页 # 4.其他情况,显示当前页的前2页,当前页,当前页的后2页 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 if user.is_authenticated(): # 用户已登录 conn = get_redis_connection(‘default‘) cart_key = ‘cart_%d‘ % user.ID 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)
模板
{% extends ‘base_detail_List.HTML‘ %}{% block Title %}天天生鲜-商品列表{% endblock Title %}{% block main_content %} <div class="breadcrumb"> <a href="#">全部分类</a> <span>></span> <a href="#">{{ type.name }}</a> </div> <div class="main_wrap clearfix"> <div class="l_wrap fl clearfix"> <div class="new_goods"> <h3>新品推荐</h3> <ul> {% for sku in new_skus %} <li> <a href="{% url ‘goods:detail‘ sku.ID %}"><img src="{{ sku.image.url }}"></a> <h4><a href="{% url ‘goods:detail‘ sku.ID %}">{{ sku.name }}</a></h4> <div class="prize">¥{{ sku.price }}</div> </li> {% endfor %} </ul> </div> </div> <div class="r_wrap fr clearfix"> <div class="sort_bar"> <a href="{% url ‘goods:List‘ type.ID 1 %}" {% if sort == ‘default‘ %}class="active"{% endif %}>默认</a> <a href="{% url ‘goods:List‘ type.ID 1 %}?sort=price" {% if sort == ‘price‘ %}class="active"{% endif %}>价格</a> <a href="{% url ‘goods:List‘ type.ID 1 %}?sort=hot" {% if sort == ‘hot‘ %}class="active"{% endif %}>人气</a> </div> <ul class="goods_type_List clearfix"> {% for sku in skus_page %} <li> <a href="{% url ‘goods:detail‘ sku.ID %}"><img src="{{ sku.image.url }}"></a> <h4><a href="{% url ‘goods:detail‘ sku.ID %}">{{ sku.name }}</a></h4> <div class="operate"> <span class="prize">¥{{ sku.price }}</span> <span class="unit">{{ sku.price}}/{{ sku.unite }}</span> <a href="#" class="add_goods" Title="加入购物车"></a> </div> </li> {% endfor %} </ul> <div class="pagenation"> {% if skus_page.has_prevIoUs %} <a href="{% url ‘goods:List‘ type.ID skus_page.prevIoUs_page_number %}?sort={{ sort }}"><上一页</a> {% endif %} {% for pindex in pages %} {% if pindex == skus_page.number %} <a href="{% url ‘goods:List‘ type.ID pindex %}?sort={{ sort }}" class="active">{{ pindex }}</a> {% else %} <a href="{% url ‘goods:List‘ type.ID pindex %}?sort={{ sort }}">{{ pindex }}</a> {% endif %} {% endfor %} {% if skus_page.has_next %} <a href="{% url ‘goods:List‘ type.ID skus_page.next_page_number %}?sort={{ sort }}">下一页></a> {% endif %} </div> </div> </div>{% endblock main_content %}总结
以上是内存溢出为你收集整理的django-列表分页和排序全部内容,希望文章能够帮你解决django-列表分页和排序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)