网站怎么做收录,建设租车网站,本地备份wordpress,网站开发外包售后维护合同文章目录 分页组件pager组件代码 分页组件
应用分页组件#xff0c;需要以下两个步骤#xff1a; 视图函数中#xff1a;#xff08;先获取queryset#xff0c;将request和queryset传入分页组件对象中#xff0c;得到生成的html标签#xff09; def customer_list(requ… 文章目录 分页组件pager组件代码 分页组件
应用分页组件需要以下两个步骤 视图函数中先获取queryset将request和queryset传入分页组件对象中得到生成的html标签 def customer_list(request):# 所有数据queryset models.Customer.objects.filter(active1).select_related(level)pager Pagination(request, queryset)context {queryset: queryset[pager.start:pager.end],pager_string: obj.html()}return render(request, customer_list.html, context)在页面上直接引用即可 {% for row in queryset %}{{row.id}}
{% endfor %}ul classpagination{{ pager_string }}
/ulpager组件代码
import copy
from django.utils.safestring import mark_safeclass Pagination(object): 分页 def __init__(self, request, query_set, per_page_count10)::param request: 需要用request对象中的GET中的数据进行校验和处理:param query_set: 查询数据库得到的查询集:param per_page_count: 每页显示几条数据# 防止分页操作对后续的使用request.GET有影响self.query_dict copy.deepcopy(request.GET)# 将self.query_dict._mutable设置为True表示query_dict可修改默认为Falseself.query_dict._mutable True# 拿到总数据据数self.query_set query_settotal_count query_set.count()self.total_count total_count# 计算出总共有多少页面self.total_page, div divmod(total_count, per_page_count)if div:self.total_page 1# 对url中的请求参数进行校验处理决定显示那一页page request.GET.get(page)if not page:page 1else:if not page.isdecimal():page 1else:page int(page)if page 0:page 1else:if page self.total_page:page self.total_pageself.page page# 每页数据条数self.per_page_count per_page_count# 页面第一条数据self.start (page - 1) * per_page_count# 页面最后一条数据self.end page * per_page_countdef html(self)::return: 生成的当前页面的分页栏htmlpager_list []if not self.total_page:return # 求出生成的分页栏html显示的页面范围if self.total_page 11:# 总页码小于11start_page 1end_page self.total_pageelse:# 总页码比较多# 判断当前页 6: 1~11if self.page 6:start_page 1end_page 11else:if (self.page 5) self.total_page:# 显示最后10页start_page self.total_page - 10end_page self.total_pageelse:# 显示前后5页start_page self.page - 5end_page self.page 5# 添加url中的参数而不是替换?age19name123page1# 首页self.query_dict.setlist(page, [1])pager_list.append(lia href?{}首页/a/li.format(self.query_dict.urlencode()))# 上一页if self.page 1:self.query_dict.setlist(page, [self.page - 1])pager_list.append(lia href?{}上一页/a/li.format(self.query_dict.urlencode()))# 当前页前后5页for i in range(start_page, end_page 1):self.query_dict.setlist(page, [i])if i self.page:item li classactivea href?{}{}/a/li.format(self.query_dict.urlencode(), i)else:item lia href?{}{}/a/li.format(self.query_dict.urlencode(), i)pager_list.append(item)# 下一页if self.page self.total_page:self.query_dict.setlist(page, [self.page 1])pager_list.append(lia href?{}下一页/a/li.format(self.query_dict.urlencode()))# 尾页self.query_dict.setlist(page, [self.total_page])pager_list.append(lia href?{}尾页/a/li.format(self.query_dict.urlencode()))pager_list.append(li classdisableda数据{}条{}页/a/li.format(self.total_count, self.total_page))pager_string mark_safe(.join(pager_list))return pager_string可能用到django框架中QueryDict知识点可以看看Django框架中的QueryDict处理url参数 若有错误与不足请指出关注DPT一起进步吧