crm中分页插件类

  • 新建500个对象,一次提交到数据库bulk_create(objs)
import os
import sys

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day78分页.settings")

    import django
    django.setup()

    from app01.models import User


    # 新建一个列表,放入500个User对象
    obj_list = [User(name='用户{}'.format(i), addr='地址{}'.format(i)) for i in range(500)]

    print(obj_list)

    # 列表比较占内存,生成器每次只取一个,占的内存是一个对象,把500个对象放入生成器中一次提交,连接和断开一次数据库,避免把时间花在每一次提交的连接和断开数据库上了。

    obj_listg = (User(name='用户{}'.format(i), addr='地址{}'.format(i)) for i in range(500))

    print(obj_listg)

    # 一次提交
    
    User.objects.bulk_create(obj_listg)

运行结果

[<User: 用户0>, <User: 用户1>, <User: 用户2>, <User: 用户3>, <User: 用户4>, <User: 用户5>, <User: 用户6>, <User: 用户7>, <User: 用户8>, <User: 用户9>, <User: 用户10>, <User: 用户11>, <User: 用户12>, <User: 用户13>, <User: 用户14>, <User: 用户15>, <User: 用户16>, <User: 用户17>, <User: 用户18>, <User: 用户19>, <User: 用户20>, <User: 用户21>, <User: 用户22>, <User: 用户23>, <User: 用户24>, <User: 用户25>, <User: 用户26>, <User: 用户27>, <User: 用户28>, <User: 用户29>, <User: 用户30>, <User: 用户31>, <User: 用户32>, <User: 用户33>, <User: 用户34>, <User: 用户35>, <User: 用户36>, <User: 用户37>, <User: 用户38>, <User: 用户39>, <User: 用户40>, <User: 用户41>, <User: 用户42>, <User: 用户43>, <User: 用户44>, <User: 用户45>, <User: 用户46>, <User: 用户47>, <User: 用户48>, <User: 用户49>, <User: 用户50>, <User: 用户51>, <User: 用户52>, <User: 用户53>, <User: 用户54>, <User: 用户55>, <User: 用户56>, <User: 用户57>, <User: 用户58>, <User: 用户59>, <User: 用户60>, <User: 用户61>, <User: 用户62>, <User: 用户63>, <User: 用户64>, <User: 用户65>, <User: 用户66>, <User: 用户67>, <User: 用户68>, <User: 用户69>, <User: 用户70>, <User: 用户71>, <User: 用户72>, <User: 用户73>, <User: 用户74>, <User: 用户75>, <User: 用户76>, <User: 用户77>, <User: 用户78>, <User: 用户79>, <User: 用户80>, <User: 用户81>, <User: 用户82>, <User: 用户83>, <User: 用户84>, <User: 用户85>, <User: 用户86>, <User: 用户87>, <User: 用户88>, <User: 用户89>, <User: 用户90>, <User: 用户91>, <User: 用户92>, <User: 用户93>, <User: 用户94>, <User: 用户95>, <User: 用户96>, <User: 用户97>, <User: 用户98>, <User: 用户99>, <User: 用户100>, <User: 用户101>, <User: 用户102>, <User: 用户103>, <User: 用户104>, <User: 用户105>, <User: 用户106>, <User: 用户107>, <User: 用户108>, <User: 用户109>, <User: 用户110>, <User: 用户111>, <User: 用户112>, <User: 用户113>, <User: 用户114>, <User: 用户115>, <User: 用户116>, <User: 用户117>, <User: 用户118>, <User: 用户119>, <User: 用户120>, <User: 用户121>, <User: 用户122>, <User: 用户123>, <User: 用户124>, <User: 用户125>, <User: 用户126>, <User: 用户127>, <User: 用户128>, <User: 用户129>, <User: 用户130>, <User: 用户131>, <User: 用户132>, <User: 用户133>, <User: 用户134>, <User: 用户135>, <User: 用户136>, <User: 用户137>, <User: 用户138>, <User: 用户139>, <User: 用户140>, <User: 用户141>, <User: 用户142>, <User: 用户143>, <User: 用户144>, <User: 用户145>, <User: 用户146>, <User: 用户147>, <User: 用户148>, <User: 用户149>, <User: 用户150>, <User: 用户151>, <User: 用户152>, <User: 用户153>, <User: 用户154>, <User: 用户155>, <User: 用户156>, <User: 用户157>, <User: 用户158>, <User: 用户159>, <User: 用户160>, <User: 用户161>, <User: 用户162>, <User: 用户163>, <User: 用户164>, <User: 用户165>, <User: 用户166>, <User: 用户167>, <User: 用户168>, <User: 用户169>, <User: 用户170>, <User: 用户171>, <User: 用户172>, <User: 用户173>, <User: 用户174>, <User: 用户175>, <User: 用户176>, <User: 用户177>, <User: 用户178>, <User: 用户179>, <User: 用户180>, <User: 用户181>, <User: 用户182>, <User: 用户183>, <User: 用户184>, <User: 用户185>, <User: 用户186>, <User: 用户187>, <User: 用户188>, <User: 用户189>, <User: 用户190>, <User: 用户191>, <User: 用户192>, <User: 用户193>, <User: 用户194>, <User: 用户195>, <User: 用户196>, <User: 用户197>, <User: 用户198>, <User: 用户199>, <User: 用户200>, <User: 用户201>, <User: 用户202>, <User: 用户203>, <User: 用户204>, <User: 用户205>, <User: 用户206>, <User: 用户207>, <User: 用户208>, <User: 用户209>, <User: 用户210>, <User: 用户211>, <User: 用户212>, <User: 用户213>, <User: 用户214>, <User: 用户215>, <User: 用户216>, <User: 用户217>, <User: 用户218>, <User: 用户219>, <User: 用户220>, <User: 用户221>, <User: 用户222>, <User: 用户223>, <User: 用户224>, <User: 用户225>, <User: 用户226>, <User: 用户227>, <User: 用户228>, <User: 用户229>, <User: 用户230>, <User: 用户231>, <User: 用户232>, <User: 用户233>, <User: 用户234>, <User: 用户235>, <User: 用户236>, <User: 用户237>, <User: 用户238>, <User: 用户239>, <User: 用户240>, <User: 用户241>, <User: 用户242>, <User: 用户243>, <User: 用户244>, <User: 用户245>, <User: 用户246>, <User: 用户247>, <User: 用户248>, <User: 用户249>, <User: 用户250>, <User: 用户251>, <User: 用户252>, <User: 用户253>, <User: 用户254>, <User: 用户255>, <User: 用户256>, <User: 用户257>, <User: 用户258>, <User: 用户259>, <User: 用户260>, <User: 用户261>, <User: 用户262>, <User: 用户263>, <User: 用户264>, <User: 用户265>, <User: 用户266>, <User: 用户267>, <User: 用户268>, <User: 用户269>, <User: 用户270>, <User: 用户271>, <User: 用户272>, <User: 用户273>, <User: 用户274>, <User: 用户275>, <User: 用户276>, <User: 用户277>, <User: 用户278>, <User: 用户279>, <User: 用户280>, <User: 用户281>, <User: 用户282>, <User: 用户283>, <User: 用户284>, <User: 用户285>, <User: 用户286>, <User: 用户287>, <User: 用户288>, <User: 用户289>, <User: 用户290>, <User: 用户291>, <User: 用户292>, <User: 用户293>, <User: 用户294>, <User: 用户295>, <User: 用户296>, <User: 用户297>, <User: 用户298>, <User: 用户299>, <User: 用户300>, <User: 用户301>, <User: 用户302>, <User: 用户303>, <User: 用户304>, <User: 用户305>, <User: 用户306>, <User: 用户307>, <User: 用户308>, <User: 用户309>, <User: 用户310>, <User: 用户311>, <User: 用户312>, <User: 用户313>, <User: 用户314>, <User: 用户315>, <User: 用户316>, <User: 用户317>, <User: 用户318>, <User: 用户319>, <User: 用户320>, <User: 用户321>, <User: 用户322>, <User: 用户323>, <User: 用户324>, <User: 用户325>, <User: 用户326>, <User: 用户327>, <User: 用户328>, <User: 用户329>, <User: 用户330>, <User: 用户331>, <User: 用户332>, <User: 用户333>, <User: 用户334>, <User: 用户335>, <User: 用户336>, <User: 用户337>, <User: 用户338>, <User: 用户339>, <User: 用户340>, <User: 用户341>, <User: 用户342>, <User: 用户343>, <User: 用户344>, <User: 用户345>, <User: 用户346>, <User: 用户347>, <User: 用户348>, <User: 用户349>, <User: 用户350>, <User: 用户351>, <User: 用户352>, <User: 用户353>, <User: 用户354>, <User: 用户355>, <User: 用户356>, <User: 用户357>, <User: 用户358>, <User: 用户359>, <User: 用户360>, <User: 用户361>, <User: 用户362>, <User: 用户363>, <User: 用户364>, <User: 用户365>, <User: 用户366>, <User: 用户367>, <User: 用户368>, <User: 用户369>, <User: 用户370>, <User: 用户371>, <User: 用户372>, <User: 用户373>, <User: 用户374>, <User: 用户375>, <User: 用户376>, <User: 用户377>, <User: 用户378>, <User: 用户379>, <User: 用户380>, <User: 用户381>, <User: 用户382>, <User: 用户383>, <User: 用户384>, <User: 用户385>, <User: 用户386>, <User: 用户387>, <User: 用户388>, <User: 用户389>, <User: 用户390>, <User: 用户391>, <User: 用户392>, <User: 用户393>, <User: 用户394>, <User: 用户395>, <User: 用户396>, <User: 用户397>, <User: 用户398>, <User: 用户399>, <User: 用户400>, <User: 用户401>, <User: 用户402>, <User: 用户403>, <User: 用户404>, <User: 用户405>, <User: 用户406>, <User: 用户407>, <User: 用户408>, <User: 用户409>, <User: 用户410>, <User: 用户411>, <User: 用户412>, <User: 用户413>, <User: 用户414>, <User: 用户415>, <User: 用户416>, <User: 用户417>, <User: 用户418>, <User: 用户419>, <User: 用户420>, <User: 用户421>, <User: 用户422>, <User: 用户423>, <User: 用户424>, <User: 用户425>, <User: 用户426>, <User: 用户427>, <User: 用户428>, <User: 用户429>, <User: 用户430>, <User: 用户431>, <User: 用户432>, <User: 用户433>, <User: 用户434>, <User: 用户435>, <User: 用户436>, <User: 用户437>, <User: 用户438>, <User: 用户439>, <User: 用户440>, <User: 用户441>, <User: 用户442>, <User: 用户443>, <User: 用户444>, <User: 用户445>, <User: 用户446>, <User: 用户447>, <User: 用户448>, <User: 用户449>, <User: 用户450>, <User: 用户451>, <User: 用户452>, <User: 用户453>, <User: 用户454>, <User: 用户455>, <User: 用户456>, <User: 用户457>, <User: 用户458>, <User: 用户459>, <User: 用户460>, <User: 用户461>, <User: 用户462>, <User: 用户463>, <User: 用户464>, <User: 用户465>, <User: 用户466>, <User: 用户467>, <User: 用户468>, <User: 用户469>, <User: 用户470>, <User: 用户471>, <User: 用户472>, <User: 用户473>, <User: 用户474>, <User: 用户475>, <User: 用户476>, <User: 用户477>, <User: 用户478>, <User: 用户479>, <User: 用户480>, <User: 用户481>, <User: 用户482>, <User: 用户483>, <User: 用户484>, <User: 用户485>, <User: 用户486>, <User: 用户487>, <User: 用户488>, <User: 用户489>, <User: 用户490>, <User: 用户491>, <User: 用户492>, <User: 用户493>, <User: 用户494>, <User: 用户495>, <User: 用户496>, <User: 用户497>, <User: 用户498>, <User: 用户499>]
<generator object <genexpr> at 0x000001B49CC87518>

数据库已成功创建500条数据
在这里插入图片描述

  • 分页
    现在问题是把500个用户显示在网页时,很长,于是现在要实现一个分页功能

在这里插入图片描述

视图函数中代码如下
views.py:

from django.shortcuts import render
from django import views
from app01.models import User
# Create your views here.
class Page(views.View):
    def get(self, request):
        try:
            current_page = int(request.GET.get('page', 1))
        except Exception as e:
            current_page = 1
        if current_page < 1:
            current_page = 1
        per_page = 10
        query_set = User.objects.all()
        total_count = query_set.count()
        total_page, more = divmod(total_count, per_page)
        if more:
            total_page += 1
        current_page = total_page if current_page > total_page else current_page
        start = per_page * (current_page -1)
        end = per_page * current_page
        user_list = query_set[start:end]
        show_page = 9
        half_show_page = show_page // 2
        if total_page < show_page:
            show_page_start = 1
            show_page_end = total_page
        elif current_page - half_show_page < 1:
            show_page_start = 1
            show_page_end = show_page
        elif current_page + half_show_page > total_page:
            show_page_end = total_page
            show_page_start = total_page - show_page + 1
        else:
            show_page_start = current_page - half_show_page
            show_page_end = current_page + half_show_page
        page_list = []
        page_list.append('<nav aria-label="Page navigation"><ul class="pagination">')
        page_list.append('<li><a href="/page/?page=1">首页</a></li>')
        if current_page - 1 < 1:
            page_list.append('<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>')
        else:
            page_list.append('<li><a href="/page/?page={}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>'.format(current_page-1))
        for i in range(show_page_start, show_page_end + 1):
            if i == current_page:
                s = '<li class="active"><a href="/page/?page={0}">{0}</a></li>'.format(i)
            else:
                s = '<li><a href="/page/?page={0}">{0}</a></li>'.format(i)
            page_list.append(s)
        if current_page + 1 > total_page:
            page_list.append('<li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>')
        else:
            page_list.append('<li><a href="/page/?page={}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'.format(current_page + 1))
        page_list.append('<li><a href="/page/?page={}">尾页</a></li>'.format(total_page))
        page_list.append('</ul></nav>')
        page_html = ''.join(page_list)
        return render(request, 'page.html',
                      {'user_list': user_list, 'page_html': page_html})

    def post(self, request):
        pass

页面效果
在这里插入图片描述
在这里插入图片描述

代码解析
在这里插入图片描述

  • 把以上分页代码封装到类中,以便类似情况可以直接使用类中封装的这些功能
    首先在根目录下新建一个工具包
    在这里插入图片描述

mypage.py:

"""
自定义分页组件
可以返回分页的数据和分页的HTML代码
"""

class Pagination(object):

    def __init__(self, current_page, total_count, url_prefix, per_page=10, show_page=9):

        '''
        初始化分页器
        :param current_page: 当前页码数
        :param total_count: 数据总数
        :param url_prefix: a标签的url前缀
        :param per_page: 每一页显示多少数据, 默认值是10
        :param show_page: 页面显示的页码数,默认值是9
        '''

        self.per_page = per_page

        self.url_prefix = url_prefix

        total_page, more = divmod(total_count, per_page)
        if more:
            total_page += 1
        self.total_page = total_page


        try:
            current_page = int(current_page)
        except Exception as e:
            current_page = 1

        if current_page < 1:
            current_page = 1

        current_page = total_page if current_page > total_page else current_page


        self.current_page = current_page

        self.per_page = per_page

        self.show_page = show_page

        self.half_show_page = self.show_page // 2


    @property
    def start(self):

        return self.per_page * (self.current_page - 1)

    @property
    def end(self):

        return self.per_page * self.current_page


    def page_html(self):

        if self.total_page < self.show_page:
            show_page_start = 1
            self.show_page_end = self.total_page
        elif self.current_page - self.half_show_page < 1:
            show_page_start = 1
            show_page_end = self.show_page
        elif self.current_page + self.half_show_page > self.total_page:
            show_page_end = self.total_page
            show_page_start = self.total_page - self.show_page + 1
        else:
            show_page_start = self.current_page - self.half_show_page
            show_page_end = self.current_page + self.half_show_page

        page_list = []
        page_list.append('<nav aria-label="Page navigation"><ul class="pagination">')
        page_list.append('<li><a href="{}?page=1">首页</a></li>'.format(self.url_prefix))
        if self.current_page - 1 < 1:
            page_list.append(
                '<li class="disabled"><a href="" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>')
        else:
            page_list.append(
                '<li><a href="{}?page={}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>'.format(self.url_prefix,
                    self.current_page - 1))
        for i in range(show_page_start, show_page_end + 1):
            if i == self.current_page:
                s = '<li class="active"><a href="{1}/?page={0}">{0}</a></li>'.format(i, self.url_prefix)
            else:
                s = '<li><a href="{1}?page={0}">{0}</a></li>'.format(i, self.url_prefix)
            page_list.append(s)
        if self.current_page + 1 > self.total_page:
            page_list.append(
                '<li class="disabled"><a href="" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>')
        else:
            page_list.append(
                '<li><a href="{}?page={}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'.format(self.url_prefix,
                    self.current_page + 1))
        page_list.append('<li><a href="{}?page={}">尾页</a></li>'.format(self.url_prefix, self.total_page))
        page_list.append('</ul></nav>')
        page_html = ''.join(page_list)
        return page_html








页面显示效果
在这里插入图片描述
解析类

在这里插入图片描述

在这里插入图片描述

检查生成的页面的html文档
在这里插入图片描述

  • 输入页面自动跳转到该页码
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42233629/article/details/84558450