django_pagination.rar

  • Django 的内置分页只支持网址的分页,没有提供分页器,分页器则需要自己实现

# views.py

from django.shortcuts import render, redirect, HttpResponse, reverse
from .models import *
# 导入Django内置分页所需的模块
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger


def employee_list(request):
    current_page = request.GET.get("page")  # 获取当前页数
    ret_data = Employee.objects.all()
    paginator = Paginator(ret_data, 10)
  '''
        paginator 对象下的相关属性
        paginator.per_page:     每页显示条目数量
        paginator.count:        数据总个数
        paginator.num_pages:    总页数
        paginator.page_range:   总页数的索引范围,如: (1,10),(1,200)
        paginator.page:         page对象
    '''
    try:
        posts = paginator.page(current_page)
 '''
            posts 对象下的相关属性,一般用于模板中制作分页器时使用
            posts.per_page:   每页显示条目数量
            posts.count:      数据总个数
            posts.num_pages:  总页数
            posts.page_range: 总页数的索引范围,如: (1,10),(1,200)
            posts.page:       page对象
        '''
    except PageNotAnInteger:
# 如果输入其他非数字的参数,那么就跳到第一页
        posts = paginator.page(1)
    except EmptyPage:
# 如果超过最大分页数,那么就跳到最后一页
        posts = paginator.page(paginator.num_pages)

    return render(request, 'employee_list.html', {'employees': posts})

# employee_list.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Title</title>
    <meta name="description" content="">
    <meta name="keywords" content="">
    {% load static %}
    <link rel="stylesheet" href='{% static 'bootstrap/css/bootstrap.min.css' %}'>
</head>
<body>
<div class="container">
    <table class="table table-bordered">
        <thead>
        <tr>
            <th>序号</th>
            <th>作者名称</th>
            <th>年龄</th>
            <th>薪资</th>
            <th>省份</th>
        </tr>
        </thead>
        <tbody>
        {% for employee in employees %}
            <tr>
                <td>{{ forloop.counter }}</td>
                <td>{{ employee.name }}</td>
                <td>{{ employee.age }}</td>
                <td>{{ employee.salary }}</td>
                <td>{{ employee.province }}</td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
<!-- 分页器 -->
    <ul class="pagination">
        {% if employees.has_previous %}
            <li><a href="/employee_list/?page={{ employees.previous_page_number }}">«</a></li>
        {% else %}
            <li class="disabled"><a href="#">«</a></li>
        {% endif %}
        <li class="active"><a href="/employee_list/?page={{ employees.number }}">{{ employees.number }}</a></li>
        {% if employees.has_next %}
            <li><a href="/employee_list/?page={{ employees.next_page_number }}">»</a></li>
        {% else %}
            <li class="disabled"><a href="#">»</a></li>
        {% endif %}
    </ul>
</div>
</body>
</html>