自定义分页器

自定义分页器,第1张

概述一,批量插入数据 def insert(request): l = [] for i in range(1000): l.append(Book(name=‘第%s天探险的日子‘%i)) Book.objects.bulk_create(l) # 传入一个可迭代对象 return HttpResponse(‘插入成功‘) 二,分析器具体写法 一,批量插入数据
@H_502_10@def insert(request):    l = []    @H_502_10@for i @H_502_10@in range(1000):        l.append(Book(name=第%s天探险的日子%i))    Book.objects.bulk_create(l) # 传入一个可迭代对象    @H_502_10@return httpResponse(插入成功)
二,分析器具体写法

  book_List.HTML:

@H_502_10@<!DOCTYPE HTML@H_502_10@>@H_502_10@<HTML lang@H_502_10@="en"@H_502_10@>@H_502_10@<head@H_502_10@>    @H_502_10@<Meta charset@H_502_10@="UTF-8"@H_502_10@>    @H_502_10@<Title@H_502_10@>Title@H_502_10@</Title@H_502_10@>    @H_502_10@<script src@H_502_10@="https://cdn.bootCSS.com/jquery/3.4.1/jquery.min.Js"@H_502_10@></script@H_502_10@>    @H_502_10@<link href@H_502_10@="https://cdn.bootCSS.com/twitter-bootstrap/3.4.1/CSS/bootstrap.min.CSS" rel@H_502_10@="stylesheet"@H_502_10@>    @H_502_10@<script src@H_502_10@="https://cdn.bootCSS.com/twitter-bootstrap/3.4.1/Js/bootstrap.min.Js"@H_502_10@></script@H_502_10@>@H_502_10@</head@H_502_10@>@H_502_10@<body@H_502_10@>@H_502_10@<div class@H_502_10@="container"@H_502_10@>    @H_502_10@<div class@H_502_10@="row"@H_502_10@>        @H_502_10@<div class@H_502_10@="col-md-8 col-md-offset-2"@H_502_10@>            @H_502_10@<table class@H_502_10@="table table-hover table-bordered table-striped"@H_502_10@>                @H_502_10@<thead@H_502_10@>                    @H_502_10@<tr@H_502_10@>                        @H_502_10@<th@H_502_10@>ID@H_502_10@</th@H_502_10@>                        @H_502_10@<th@H_502_10@>name@H_502_10@</th@H_502_10@>                    @H_502_10@</tr@H_502_10@>                @H_502_10@</thead@H_502_10@>                @H_502_10@<tbody@H_502_10@>{#                传入queryset对象#}                    {% for book in page_queryset %}                    @H_502_10@<tr@H_502_10@>                        @H_502_10@<td@H_502_10@>{{ book.pk }}@H_502_10@</td@H_502_10@>                        @H_502_10@<td@H_502_10@>{{ book.name }}@H_502_10@</td@H_502_10@>                    @H_502_10@</tr@H_502_10@>                    {% endfor %}                @H_502_10@</tbody@H_502_10@>            @H_502_10@</table@H_502_10@>{#        用安全模式取出分页器#}        {{ page_obj.page_HTML|safe }}        @H_502_10@</div@H_502_10@>    @H_502_10@</div@H_502_10@>@H_502_10@</div@H_502_10@>@H_502_10@</body@H_502_10@>@H_502_10@</HTML@H_502_10@>

  vIEws.py

@H_502_10@def show_books(request):    # 首先取出所有的书籍    book_List = Book.objects.all()    # 取出所有书籍的总个数    all_count = book_List.count()    # 取出地址栏里面的page参数,没有的话默认是1    current_page = request.GET.get(page,1)    # 生成一个分页器对象,参数设置当前页,对象总数,每页显示多少数据    page_obj = my_page.Pagination(current_page=current_page,all_count=all_count,per_page_num=10)    # 等到一个queryset对象,切片显示当前页面    page_queryset = book_List[page_obj.start:page_obj.end]    @H_502_10@return render(request,book_List.HTML,locals())

   ps:需要在你的应用下面新建一个utils文件夹,然后再在这个文件夹下面新建一个my_page.py文件

  my_page.py:

@H_502_10@class Pagination(object):    @H_502_10@def __init__(self,current_page,all_count,per_page_num=2,pager_count=11):        """        封装分页相关数据        :param current_page: 当前页        :param all_count:    数据库中的数据总条数        :param per_page_num: 每页显示的数据条数        :param pager_count:  最多显示的页码个数        用法:        queryset = model.objects.all()        page_obj = Pagination(current_page,all_count)        page_data = queryset[page_obj.start:page_obj.end]        获取数据用page_data而不再使用原始的queryset        获取前端分页样式用page_obj.page_HTML        """        @H_502_10@try:            current_page = int(current_page)        @H_502_10@except Exception as e:            current_page = 1        @H_502_10@if current_page < 1:            current_page = 1        self.current_page = current_page        self.all_count = all_count        self.per_page_num = per_page_num        # 总页码        all_pager,tmp = divmod(all_count,per_page_num)        @H_502_10@if tmp:            all_pager += 1        self.all_pager = all_pager        self.pager_count = pager_count        self.pager_count_half = int((pager_count - 1) / 2)    @property    @H_502_10@def start(self):        @H_502_10@return (self.current_page - 1) * self.per_page_num    @property    @H_502_10@def end(self):        @H_502_10@return self.current_page * self.per_page_num    @H_502_10@def page_HTML(self):        # 如果总页码 < 11个:        @H_502_10@if self.all_pager <= self.pager_count:            pager_start = 1            pager_end = self.all_pager + 1        # 总页码  > 11        @H_502_10@else:            # 当前页如果<=页面上最多显示11/2个页码            @H_502_10@if self.current_page <= self.pager_count_half:                pager_start = 1                pager_end = self.pager_count + 1            # 当前页大于5            @H_502_10@else:                # 页码翻到最后                @H_502_10@if (self.current_page + self.pager_count_half) > self.all_pager:                    pager_end = self.all_pager + 1                    pager_start = self.all_pager - self.pager_count + 1                @H_502_10@else:                    pager_start = self.current_page - self.pager_count_half                    pager_end = self.current_page + self.pager_count_half + 1        page_HTML_List = []        # 添加前面的nav和ul标签        page_HTML_List.append(‘‘‘                    <nav aria-label=‘Page navigation>‘                    <ul class=‘pagination‘>                ‘‘‘)        first_page = <li><a href="?page=%s">首页</a></li> % (1)        page_HTML_List.append(first_page)        @H_502_10@if self.current_page <= 1:            prev_page = <li ><a href="#">上一页</a></li>        @H_502_10@else:            prev_page = <li><a href="?page=%s">上一页</a></li> % (self.current_page - 1,)        page_HTML_List.append(prev_page)        @H_502_10@for i @H_502_10@in range(pager_start,pager_end):            @H_502_10@if i == self.current_page:                temp = <li ><a href="?page=%s">%s</a></li> % (i,i,)            @H_502_10@else:                temp = <li><a href="?page=%s">%s</a></li> % (i,)            page_HTML_List.append(temp)        @H_502_10@if self.current_page >= self.all_pager:            next_page = <li ><a href="#">下一页</a></li>        @H_502_10@else:            next_page = <li><a href="?page=%s">下一页</a></li> % (self.current_page + 1,)        page_HTML_List.append(next_page)        last_page = <li><a href="?page=%s">尾页</a></li> % (self.all_pager,)        page_HTML_List.append(last_page)        # 尾部添加标签        page_HTML_List.append(‘‘‘                                           </nav>                                           </ul>                                       ‘‘‘)        @H_502_10@return ‘‘.join(page_HTML_List)
总结

以上是内存溢出为你收集整理的自定义分页器全部内容,希望文章能够帮你解决自定义分页器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1071680.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存