Django框架中自定义分页数据显示 实现网站翻页操作

鳄鱼君

发表文章数:642

Vieu四代商业主题

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

¥69 现在购买
首页 » Python » Django框架中自定义分页数据显示 实现网站翻页操作

很多的网站都可以进行翻页,那么我们的jango也不能落后。在django我们也可以自定义分页,在这里鳄鱼君Ba选择先把代码贴出来,然后带着一起分析一下思路:

from django.shortcuts import render
from django.utils.safestring import mark_safe  #转换为安全标签


LIST=[]
for i in range(103):
    LIST.append(i)
def index(request):
    main_page=int( request.GET.get('p',1) ) #获取的p为字符串,直接转换为int
    #参考下面的格式,每页显示10个
    data=LIST[1:11]
    data=LIST[11:21]

    data=LIST[(main_page-1)*10+1:(main_page*10)+1]

    #测试手动翻页
    page_html="""  
        <a href="/index/?p=1">1</a>
        <a href="/index/?p=2">2</a>
        <a href="/index/?p=3">3</a>
    """

    #divmod()	接收两个数字类型(非复数)参数,返回一个包含商和余数的元组(a // b, a % b)。
    all_list=len(LIST)
    count,remainder=divmod(all_list,10)   #一个为商,第二个为余数
    if remainder:  #如果all_list除以10 存在余数,需要重新生成一页展示
        count+=1
    page_list=[]<p style="text-indent: 2em">
    for i in range(1,count+1):  #生成准确的页数
        if i==main_page:
            tem=f'<a class="page active" href="/index/?p={i}">{i}</a>'
        else:
            tem = f'<a class="page" href="/index/?p={i}">{i}</a>'
        page_list.append(tem)
    page_str="".join(page_list)   #将列表转换为字符串

    page_html=mark_safe(page_str) #将标签转换为html的安全标签
    return render(request,'index.html',{'li':data,'page_html':page_html})

鳄鱼君Ba配置的URL为:http://127.0.0.1:8000/index/,我们呢把翻页的URL设置为:http://127.0.0.1:8000/index/?p=11这样的,翻页只需要更换p的数值。那么这里我不在介绍如何配置并在index页面中展示出来,应该都已经熟练的掌握了!

假设现在创建103个数值,来展示,每页显示10个数值,从1开始到11结束,代码中我列举了几个,然后寻找规律修改为一行代码就可以显示全部的页码,这里你需要使用测试的翻页URL进行查看,看一下效果是否是自己预想的呢样。

数值是不固定的,现在是103个,我也可以是104、105,对于不固定的数值,我们就需要做一些处理,确保都可以显示出来,所以使用Python内置的方法divmod,他接收两个值,divmod会用第一个值除以第二个值,返回(商,余数),我们做一个判断,如果存在余数,则商加1,那么就会重新开辟一页显示,这样就保证了数值的完整性。

这样我们把页码数放到a标签中,地址为我们配置页码URL,把所有的页码都生产并存放到列表中,然后使用join方法转换为字符串,这样在传给index.html页面进行展示,我的index.html页面代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义分页</title>
    <style>
        .page{
            margin: 0 2px;
            padding: 0 3px;
            background-color: cyan;
        }
        .page.active{
            background-color: brown;
        }
    </style>
</head>
<body>
<ul>
    {% for item in li %}
   {% include 'children.html' %}   {#   引入childre.htnml 模板:<li>{{ item }}</li>     #}
    {% endfor %}
</ul>
<div>
    {{ page_html }}
</div>
</body>
</html>

在这里需要注意index.html接收的page_html是一连串的a标签,为了安全起见,django会默认处理为字符串,也就是不会解析当做html标签,为什么呢?就比方说,你在评论区评论了这样一段话:

for (var i = 0; i < 999999; i++) {
		widnow.alert("");
	}

如果这段代码不在我的代码区域,那么浏览器就会认为这是一个js代码,它会执行这段js,那么网页就会被一直出现弹窗,关闭不了,这只是一种简单的解释,为了网页的安全,需要告诉django这是一个安全的html标签,你帮我解析它。在代码的开始我已经引入了mark_safe,然后mark_safe(page_str)一下就可以了,还有一种方式就是直接在index.html中接收page_str的时候这样写 {{ page_str|safe }},空格不影响django渲染。

到此我们就实现了自定义分页,非常的简单吧!你可以玩个一上午,看看。玩着玩着BUG就出来了,那么我们需要处理一下,参考:自定义分页的完美篇

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Django框架中自定义分页数据显示 实现网站翻页操作》 发布于2020-04-22

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

评论 抢沙发

1 + 5 =


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

支付宝扫一扫打赏

微信扫一扫打赏

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

登录

忘记密码 ?

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

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

注册