当前位置:首页 >  开发者 >  12.2弹框和分页器组件

12.2弹框和分页器组件

1.ajax结合sweetalert实现删除按钮动态效果#views.pyimporttimedefhome(request):ifrequest.is_ajax():back_dic={'code':1000,'msg':''

1.ajax结合sweetalert实现删除按钮动态效果

#views.py
import time
def home(request):
    if request.is_ajax():
        back_dic={'code':1000,'msg':''}
        delete_id=request.POST.get('delete_id')
        time.sleep(3)
        models.User.objects.filter(pk=delete_id).delete()
        back_dic['msg']='数据已经被我删了'
        return JsonResponse(back_dic)
    user_quertset=models.User.objects.all()
    return render(request,'home.html',locals())

#home.html

    
    Title
    
    {% load static %}
    
    
    
    
    


数据展示


{% for userobj in user_quertset %} {% endfor %}
序号 用户名 年龄 性别 操作
{{ forloop.counter }} {{ userobj.username }} {{ userobj.age }} {{ userobj.get_gender_display }} 编辑 删除

2.bulk_create批量插入数据

for i in range(1000):
    models.book.object.create(title='第%本书'%i)
    #这样做运行很慢,花了六百多毫秒
    
#批量插入数据,建议使用bulk_create方法

book_list = []
    for i in range(100):
        book_list.append(models.Book(title='第%s书'%i)) 
        #不走数据库 首先生成10000个对象
models.Book.objects.bulk_create(book_list)

3.自定义分页器思路:

分页意味着对总的数据做切片操作,每一次展示一块内容。恰巧queryset支持切片操作(不支持负数),用get请求实现翻页的跳转功能。

#views.py
# 一页展示的条数
    per_page_num = 10
    book_queryset = models.Book.objects.all()
#总共有多少条数据
    all_count = book_queryset.count()
    #结果是元组,解压赋值
    all_page_num,more = divmod(all_count,per_page_num)  #熟知divmod的用法
    if more:
        all_page_num += 1  # 到底需要多少页面展示
# 用户想要查看的页码
    current_page = request.GET.get('page', 1)
    current_page = int(current_page)
    
    start_page = (current_page - 1) * per_page_num
    end_page = current_page * per_page_num
    
    book_queryset = book_queryset[start_page:end_page]
    html = ''
    xxx = current_page
    if current_page < 6:
        xxx = 6
    for i in range(xxx-5,xxx+6):
        if current_page == i:
            html += '
  • %s
  • '%(i,i) else: html += '
  • %s
  • ' % (i, i) return render(request,'index.html',locals()) #index.html(分页器)

    4.分页器组件

    先在应用下新建一个utils文件夹,里面新建一个py文件放这段代码

    class Pagination(object):
        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
            """
            try:
                current_page = int(current_page)
            except Exception as e:
                current_page = 1
    
            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)
            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
        def start(self):
            return (self.current_page - 1) * self.per_page_num
    
        @property
        def end(self):
            return self.current_page * self.per_page_num
    
        def page_html(self):
            # 如果总页码 < 11个:
            if self.all_pager <= self.pager_count:
                pager_start = 1
                pager_end = self.all_pager + 1
            # 总页码  > 11
            else:
                # 当前页如果<=页面上最多显示11/2个页码
                if self.current_page <= self.pager_count_half:
                    pager_start = 1
                    pager_end = self.pager_count + 1
    
                # 当前页大于5
                else:
                    # 页码翻到最后
                    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
                    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('''
                        
                                               
                                           ''')
            return ''.join(page_html_list)
    
    #views.py
    from app01.utils.mypage import Pagination
    def index(request):
        book_queryset=models.Book.objects.all()
    
        #自定义分页器的使用
        current_page=request.GET.get('page',1)
        all_count=book_queryset.count()
        page_obj=Pagination(current_page=current_page,all_count=all_count,per_page_num=10,pager_count=5) #生成一个分页器对象
        page_queryset=book_queryset[page_obj.start:page_obj.end] #book_queryset = book_queryset[start_page:end_page]
        return render(request,'index.html',locals())
    
    #index.html不使用分页器普通组件,使用动态组件
    
    {% for book in page_queryset %}

    {{ book }}

    {% endfor %} {{ page_obj.page_html|safe }} #自动渲染所有的页码及样式

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,
    如果涉及侵权请联系站长邮箱:support@yingtwo.com 进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    原文链接:none

    最近更新

    LinuxCentOS7.x离线安装PostgreSQL操作手册
    LinuxCentOS7.x离线安装PostgreSQL操作手册

    一、准备环节rpm-qa|greppostgr...

    h3c路由器怎么设置
    h3c路由器怎么设置

    h3c路由器设置方法:工具/原料:华为Mate...

    南航里程有什么用处?
    南航里程有什么用处?

    每一次旅客与南航同行,只要在购票或者办理乘机手...

    陈睿求变,B站依旧艰难
    陈睿求变,B站依旧艰难

    雷达财经鸿途出品 文|莫恩盟 编|深海在6月2...

    超级女英雄哪个厉害
    超级女英雄哪个厉害

    漫威中有数不清的超级英雄,而在我们讨论最强大的...

    台电平板屏幕多少钱
    台电平板屏幕多少钱

    尊敬的台电用户:您好,X80HD的外屏是120...

    嘉实多和昆仑哪个好
    嘉实多和昆仑哪个好

    你好!嘉实多机油是业界最好的,比昆仑机油贵很多...

    68.C++中的const
    68.C++中的const

    编写程序过程中,我们有时不希望改变某个变量的值...

    封神榜哪个版本游戏
    封神榜哪个版本游戏

    PC上的荡神志、刀剑封魔录、封神榜之英雄无敌P...