Django框架自定义翻页的完美篇

鳄鱼君

发表文章数:642

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Django框架自定义翻页的完美篇

Django自定义翻页这篇文章中,我们介绍了如何在django中自定义分页显示,但是BUG很多,我这里不在一一例举,相信你自己在尝试的时候会发现很不完善,那么对于bug我们需要修改代码,让翻页更加完美,代码参考:

LIST=[]
for i in range(2333):
    LIST.append(i)

class Page():
    def __init__(self,cur_page,url_page='/index/?p=',count_page=10):
        self.cur_page=cur_page  #当前页码数-浏览器中的页码
        self.url_page=url_page  #翻页URL
        self.count_page=count_page  #显示的页码数量
        self.all_list = len(LIST)  #数据的总数量
    @property
    def start(self):
        return (self.cur_page - 1) * 10 + 1  #从1开始
    @property
    def end(self):
        return (self.cur_page * 10) + 1 #到11结束
    @property
    def content(self):
        count, remainder = divmod(self.all_list, 10)  # 一个为商,第二个为余数
        if remainder:  # 如果all_list除以10 存在余数,需要重新生成一页展示
            count += 1
        page_list = []
        if  self.cur_page==1 or self.cur_page>count:
            previous_page = f'<a class="page hide" href="{self.url_page}{self.cur_page - 1}">上一页</a>'
        else:
            previous_page = f'<a class="page" href="{self.url_page}{self.cur_page - 1}">上一页</a>'
        page_list.append(previous_page)
        if count < 11:
            start_page=1
            end_page=self.cur_page
        else:  #总页数大于11
            if self.cur_page<=6: #判断当前页码数  是否小于等于6
                start_page =1
                end_page = 11
            else:
                start_page = self.cur_page-4
                end_page = self.cur_page+4+1
                if self.cur_page+5>count:
                    end_page=count+1
        for i in range(start_page,end_page):  # 生成准确的页数
            if i == self.cur_page:  #当前页码高亮显示
                tem = f'<a class="page active" href="{self.url_page}{i}">{i}</a>'
            else :
                if self.cur_page>count:
                    tem = ''
                else:
                    tem=f'<a class="page" href="{self.url_page}{i}">{i}</a>'
            page_list.append(tem)
        if self.cur_page<count:
            next_page = f'<a class="page " href="{self.url_page}{self.cur_page + 1}">下一页</a>'
        else:
            next_page=''
        page_list.append(next_page)
        #实现页码数跳转 定义js代码
        js = """  
        <input type="text"/><a class="page" onclick="PageTo(this,'/index/?p=');">跳转</a>
        <script>
        function PageTo(ths,base){
            var strip_page=ths.previousSibling.value;
            location.href=base+strip_page;
        }
        </script>
        """
        page_list.append(js)  

        page_str = "".join(page_list)  # 将列表转换为字符串
        page_html = mark_safe(page_str)  # 将标签转换为html的安全标签
        return page_html



def index(request):
    cur_page=int(request.GET.get('p',1)) #获取的p为字符串,直接转换为int
    obj=Page(cur_page)
    data = LIST[obj.start:obj.end]  #[1:11]、[11:21]...
    return render(request,'index.html',{'li':data,'page_html':obj.content})

为了代码有更好的可读性,可以把所有的和页码有关的代码放到一个单独的py文件中,创建一个类,在views.py中使用的时候只需要导入就可以了。

代码的解释也非常简单,就是来回的做一些判断,确保页码数的显示是合理的,在这里我不在详细介绍,都在注释中,可以自己看一下!

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Django框架自定义翻页的完美篇》 发布于2020-04-22

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

9 + 2 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册