django 分页

django 提供自己封装的分页控件,可供使用
下面示例

models.py

from django.db import models

class UserInfo(models.Model):
    username = models.CharField(max_length=128, null=True, blank=True)
    name = models.CharField(max_length=128, null=True, blank=True)
    password = models.CharField(max_length=128, null=True, blank=True)

    def __str__(self):
        return self.username

urls.py

from django.conf.urls import url
from django.contrib import admin
from demo01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^test/', views.Test),
]

/demo01/views.py

from django.shortcuts import render

from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger


from demo01 import models
# Create your views here.

def Test(request):
    data_obj_li = models.UserInfo.objects.all()
    p = Paginator(data_obj_li, 2)   #每一页显示几条

    print("数据总数", p.count)
    print("数据页数", p.num_pages)
    print("数据页数范围", p.page_range)
    print("是否有下一页", p.page(2).has_next())
    print("是否有上一页", p.page(2).has_previous())
    print("是否有其他页码", p.page(2).has_other_pages())
    print("下一页的页码", p.page(2).next_page_number())
    print("上一页的页码", p.page(2).previous_page_number())

    get_page = int(request.GET.get('page', 1))

    try:
        data_obj_li = p.page(get_page)
    except PageNotAnInteger:
        data_obj_li = p.page(1)
    except EmptyPage:
        data_obj_li = p.page(p.num_pages)

    return render(request, 'test.html', locals())

templates/test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table>
        <thread>
            <tr>
                <th>用户名</th>
                <th>密码</th>
                <th>人名</th>
            </tr>
        </thread>
        <tbody>
            {% for item in data_obj_li %}
                <tr>
                    <td>{{ item.username }}</td>
                    <td>{{ item.password }}</td>
                    <td>{{ item.name }}</td>
                </tr>

            {% endfor %}
        </tbody>
    </table>

<div>
    <ul class="paginator" id ="page">
        {% if data_obj_li.has_previous %}
            <li class="previous"><a href="/test/?page="{{ data_obj_li.previous_page_number }}>上一页</a></li>
        {% else %}
            <li class="previous disabled"><a href="#">上一页</a></li>
        {% endif %}

        {% for num in p.page_range %}
            {% if num == get_page %}
                <li class="item active"><a href="/test/?page= {{ num }}">{{ num }}</a></li>
            {% else %}
                <li class="item"><a href="/test/?page={{ num }}">{{ num }}</a></li>
            {% endif %}
        {% endfor %}


        {% if data_obj_li.has_next %}
            <li class="next"><a href="/test/?page={{ data_obj_li.next_page_number }}">下一页</a></li>
        {% else %}
            <li class="next disabled"><a href="#">下一页</a></li>
        {% endif %}

    </ul>
</div>
</body>
</html>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值