分页是django里的一个难点,如果要用它实现可以使用django提供的组件Paginator,也可以很方便的引入bootstrap样式。

后端代码:

# 从数据库获取到所有的对象
user_list = UserInfo.objects.all()

# 用Paginator对prettynum_list里的数据分页,每15条一页
paginator = Paginator(user_list, 15)

# 从页面url GET获取到page的值,这里的1表示若为空时默认值
page_number = request.GET.get('page', 1)

# 获取哪一页
page_obj = paginator.get_page(page_number)

# 获取本页所有的对象赋值给queryset
page_obj_queryset = page_obj.object_list

# 这里传过去的两个值,一个是queryset,一个是页码
return render(request, "user_list.html", {'page_obj_queryset': page_obj_queryset, "page_obj": page_obj})

前端代码:

                <tbody>
                    {% for obj in page_obj_queryset %}
                    <tr>
                        <td>{{ obj.id }}</td>
                        <td>{{ obj.mobile }}</td>
                        <td>
                            <a class="btn btn-primary btn-xs" href="/prettynum/{{ obj.id }}/edit">编辑</a>
                            <a class="btn btn-danger btn-xs" href="/prettynum/{{ obj.id }}/delete">删除</a>
                        </td>
                    </tr>
                    {% endfor %}
                </tbody>

分页组件:

    <div class="pagination">
        <span class="step-links">
            {% if page_obj.has_previous %}
            <a href="?page=1">&laquo; 首页</a>
            <a href="?page={{ page_obj.previous_page_number }}">&lt; 上一页</a>
            {% endif %}

            <span class="current-page">
                {{ page_obj.number }} / {{ page_obj.paginator.num_pages }}
            </span>

            {% if page_obj.has_next %}
            <a href="?page={{ page_obj.next_page_number }}">下一页 &gt;</a>
            <a href="?page={{ page_obj.paginator.num_pages }}">尾页 &raquo;</a>
            {% endif %}
        </span>
    </div>