django实现分页功能详解

先展示整体代码
views

from django.shortcuts import render,HttpResponse
from .models import *
import time
from django.core.paginator import Paginator
# Create your views here.
# def create_data(request):
#     now_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
#     for i in range(30,30):
#         s = ''
#         s = s+'book%s'%i
#         borrowBook.objects.create(name=s,time=now_time)
#         s=''
#     return HttpResponse(111)
def index(request,pindex):
    book_obj = borrowBook.objects.all()
    books = book_obj.values_list()
    print(type(books))
    paginator = Paginator(books,5)
    if pindex == '':
        pindex=1
    else:
        int(pindex)
    num = paginator.num_pages
    page = paginator.page(pindex)
    print('page',page)
    return render(request,'index.html',{'page':page,'num':num})

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>{{ num }}页
跳转到第<input type="number" style="width: 50px"><button>跳转</button>
<script type="text/javascript">
    $('button').click(function () {
        var num = $('input').val();
        console.log(num);
        if(num<=0 || num>{{ num }}){
            alert('请正确输入页码');
            $('input').val('');
        }else{
            window.location.href=num;

        }
    })
</script>
<h1>hello</h1>

{% for foo in page %}
书名:{{ foo.1 }}   时间:{{ foo.2 }}<br>
{% endfor %}


{#判断当前页面是否有上一页#}
{% if page.has_previous %}
{#    如果存在上一页点击'<'可以跳转到上一页#}
    <a href="{{ page.previous_page_number }}" aria-label="Previous">
        <span aria-hidden="true">&laquo</span>
    </a>
{% endif %}
{#循环遍历出页码列表#}
{% for foo in page.paginator.page_range %}
    {% if pindex == page.number %}
        <a href="">{{ foo }}</a>
        {% else %}
        <a href="{{ foo }}">{{ foo }}</a>
    {% endif %}
{% endfor %}

{#判断是否存在下一页#}
{% if page.has_next %}
    <a href="{{ page.next_page_number }}" aria-label="Next">
        <span aria-hidden="true">&raquo</span>
    </a>
{% endif %}

</body>
</html>

详解

创建一个django项目
models

class borrowBook(models.Model):
    name = models.CharField(max_length=10)
    time = models.DateTimeField(auto_now_add=False)

    class Meta:
        db_table = 'app'

使用命令生成迁移文件和迁移文件

python manage.py makemigrations
python manage.py migrate

这里添加数据是自动添加,可以定义一个函数
在views中引入models

from models import *
def create_data(request):
    now_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    for i in range(30,30):
        s = ''
        s = s+'book%s'%i
        borrowBook.objects.create(name=s,time=now_time)
        s=''

这样就把50条数据存进去了

实现分页功能,django有自带的Paginator

from django.core.paginator import Paginator

先获取数据库中所有数据,并且转换为列表

book_obj = borrowBook.objects.all()
books = book_obj.values_list()

将Paginator进行实例化,第一个参数是在哪里获取数据,第二个参数是每页几条数据

paginator = Paginator(books,5)

paginator中的num_pages是获取总共页数

num = paginator.num_pages

然后把当前页的对象传到前端

page = paginator.page(pindex)
return render(request,'idnex.html',{'page':page,'num':num})

创建index页面

展示共有多少页,可以根据后端传递过来的num判断

{{num}}

先实现底部分页按钮

对page进行遍历

{% for foo in page %}
书名:{{ foo.1 }}   时间:{{ foo.2 }}<br>
{% endfor %}

使用page.has_previous判断是否存在上一页,返回ture或false

{% if page.has_previous %}
	pass
{% endif %}

如果存在上一页点击’<'可以跳转到上一页,&laquo是<的意思, page.previous_page_number是返回上一页的页码

<a href="{{ page.previous_page_number }}" aria-label="Previous">
        <span aria-hidden="true">&laquo</span>
</a>

然后遍历出所有页码列表

{% for foo in page.paginator.page_range %}    
	{% if pindex == page.number %}        
	<a href="">{{ foo }}</a>        
	{% else %}        
	<a href="{{ foo }}">{{ foo }}</a>    
{% endif %}
{% endfor %}

判断是否存在下一页

{% if page.has_next %}    
	<a href="{{ page.next_page_number }}" aria-label="Next">        
    <span aria-hidden="true">&raquo</span>    
</a>
{% endif %}

然后添加一个可以跳转的功能

跳转到第<input type="number" style="width: 50px"><button>跳转</button>

当点击跳转后,先获取input中的内容,然后对对内容进行判断

<script type="text/javascript">
    $('button').click(function () {
        val num = $)'input'.val()
        .....
    })
<script>

如果num的值不在范围内弹出一个弹框提示正确输入页码

if(num<=0 || num>{{ num }}){    
    alert('请正确输入页码');    
    $('input').val('');

否则就直接跳转

else{    
window.location.href=num;
}
发布了14 篇原创文章 · 获赞 0 · 访问量 454
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览