当前位置:
首页 > temp > python入门教程 >
-
python3 之 天天生鲜 列表页 排序order_by() 和 分页器Paginator
url(r'^list/(?P<category_id>\d*)/(?P<page_num>\d*)$', views.ListGoods.as_view(), name='list'),
(?P<category_id>\d*)/(?P<page_num>\d*) 定义了 def get(self,request,category_id,page_num): 传参必须要用的 变量名
class ListGoods(View): def get(self,request,category_id,page_num): # 获取sort参数:如果用户不传,就是默认的排序规则 sort = request.GET.get('sort') #商品种类 categorys = GoodsCategory.objects.all() #得到某一种类 get try: category = GoodsCategory.objects.get(id=category_id) except GoodsCategory.DoesNotExist: #DoesNot:不 Exist:存在 return redirect('/list/1/1') # 查询该类别所有商品SKU信息:按照排序规则来查询 if sort == 'price': # 按照价格由低到高 skus = GoodsSKU.objects.filter(category=category).order_by('price') elif sort == 'hot': # 按照销量由高到低 skus = GoodsSKU.objects.filter(category=category).order_by('-sales') #倒序 else: # 默认 如果不传入.order_by(字段),会发出警告!! UnorderedObjectListWarning skus = GoodsSKU.objects.filter(category=category).order_by('id') # 无论用户是否传入或者传入其他的排序规则,我在这里都重置成'default' sort = 'default' #新品推荐 new_skus = skus.order_by('-create_time')[:2] # 创建分页器 对象 一页显示的数量 paginator = Paginator(skus,2) page_num = int(page_num) #转换 try: #获取 第几页的对象 page_skus = paginator.page(page_num) except EmptyPage: # except Exception: page_skus = paginator.page(1) #获得页数列表 一共几页 可遍历出来1,2,3... page_list = paginator.page_range context = { 'sort':sort, 'categorys': categorys, 'category': category, 'page_skus':page_skus, 'new_skus':new_skus, 'page_list':page_list, } # 购物车 cart_num = 0 # 自定义购物车函数 cart_num = cartnum(request, cart_num) # 字典更新 /添加 购物车数量 context.update(cart_num=cart_num) return render(request, 'list.html', context)
html
<div class="sort_bar"> <a href="{% url 'goods:list' category.id 1 %}?sort=default" {% if sort == 'default' %}class="active"{% endif %}>默认</a> <a href="{% url 'goods:list' category.id 1 %}?sort=price" {% if sort == 'price' %}class="active"{% endif %}>价格</a> <a href="{% url 'goods:list' category.id 1 %}?sort=hot" {% if sort == 'hot' %}class="active"{% endif %}>人气</a> </div>
{% if sort == 'default' %}class="active"{% endif %} active 在css里设定了样式
类似于这样:
分页器
# 创建分页器 对象 一页显示2个商品 paginator = Paginator(skus,2) page_num = int(page_num) #转换 try: #获取 第几页的对象 page_skus = paginator.page(page_num) except EmptyPage: # except Exception: page_skus = paginator.page(1) #获得页数列表 一共几页 可遍历出来1,2,3... page_list = paginator.page_range
<div class="pagenation"> <a href="{% url 'goods:list' category.id 1 %}?sort={{ sort }}">首页</a> {% if page_skus.has_previous %} <!-- previous page number:之前的页码 --> <a href="{% url 'goods:list' category.id page_skus.previous_page_number %}?sort={{ sort }}"><上一页</a> {% endif %} {% for page in page_list %} <a href="{% url 'goods:list' category.id page %}?sort={{ sort }}" {% if page == page_skus.number %} class="active" {% endif %}>{{ page }}</a> {% endfor %} {% if page_skus.has_next %} <a href="{% url 'goods:list' category.id page_skus.next_page_number %}?sort={{ sort }}">下一页></a> {% endif %} </div>
出处:https://www.cnblogs.com/Py-beginner/p/13895585.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数