Django实现分页功能

Django是一个基于MVT模式的Web框架,提供了方便的分页功能,可以进行快速的实现。在实践中,分页功能也是Web应用中必不可少的一部分。

本文将详解Django实现分页功能的完整攻略,过程中提供代码示例。

首先,需要安装Django框架,可以使用pip进行安装。

pip install django

在视图函数中,需要对数据进行分页处理。假设有一个数据模型为Person,需要对其进行分页处理。举例如下:

from django.core.paginator import Paginator

# 获取Person对象列表
person_list = Person.objects.all().order_by('-id')

# 创建分页对象
paginator = Paginator(person_list, 10)

# 获取当前页码数
page_number = request.GET.get('page')

# 获取当前页的数据
page_obj = paginator.get_page(page_number)

然后,在模板中,需要使用Django提供的Paginator类进行分页渲染。可以使用for循环遍历 Paginator对象的page_range属性,生成页码链接。

<!-- 渲染分页 -->
<div class="pagination">
    <span class="step-links">
        {% if page_obj.has_previous %}
            <a href="?page=1">« 第一页</a>
            <a href="?page={{ page_obj.previous_page_number }}">上一页</a>
        {% endif %}

        {% for page_num in page_obj.paginator.page_range %}
            {% if page_obj.number == page_num %}
                <span class="current-page">{{ page_num }}</span>
            {% elif page_num > page_obj.number|add:'-3' and page_num < page_obj.number|add:'3' %}
                <a href="?page={{ page_num }}">{{ page_num }}</a>
            {% endif %}
        {% endfor %}

        {% if page_obj.has_next %}
            <a href="?page={{ page_obj.next_page_number }}">下一页</a>
            <a href="?page={{ page_obj.paginator.num_pages }}">最后一页 »</a>
        {% endif %}
    </span>
</div>

完整代码示例如下:

from django.shortcuts import render
from django.core.paginator import Paginator
from .models import Person

def person_list(request):
    # 获取Person对象列表
    person_list = Person.objects.all().order_by('-id')

    # 创建分页对象
    paginator = Paginator(person_list, 10)

    # 获取当前页码数
    page_number = request.GET.get('page')

    # 获取当前页的数据
    page_obj = paginator.get_page(page_number)

    context = {
        'page_obj': page_obj,
        'person_list': person_list
    }

    return render(request, 'person_list.html', context=context)
<!-- person_list.html -->
{% extends 'base.html' %}

{% block content %}
    <h1>Person列表</h1>

    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>年龄</th>
            </tr>
        </thead>

        <tbody>
            {% for person in page_obj %}
                <tr>
                    <td>{{ person.id }}</td>
                    <td>{{ person.name }}</td>
                    <td>{{ person.age }}</td>
                </tr>
            {% endfor %}
        </tbody>
    </table>

    <!-- 渲染分页 -->
    <div class="pagination">
        <span class="step-links">
            {% if page_obj.has_previous %}
                <a href="?page=1">« 第一页</a>
                <a href="?page={{ page_obj.previous_page_number }}">上一页</a>
            {% endif %}

            {% for page_num in page_obj.paginator.page_range %}
                {% if page_obj.number == page_num %}
                    <span class="current-page">{{ page_num }}</span>
                {% elif page_num > page_obj.number|add:'-3' and page_num < page_obj.number|add:'3' %}
                    <a href="?page={{ page_num }}">{{ page_num }}</a>
                {% endif %}
            {% endfor %}

            {% if page_obj.has_next %}
                <a href="?page={{ page_obj.next_page_number }}">下一页</a>
                <a href="?page={{ page_obj.paginator.num_pages }}">最后一页 »</a>
            {% endif %}
        </span>
    </div>

{% endblock %}

以上就是本文详解Django实现分页功能的完整攻略,通过Django提供的Paginator类,可以方便地实现分页功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django实现分页功能 - Python技术站

(0)
上一篇 2023年3月13日
下一篇 2023年3月13日

相关文章

  • django配置(一)STATIC_ROOT

    说在前面:     最近学习的视频课程也逐渐到尾声了,来记录一些django中需要注意的配置修改 MEDIA_ROOT:     在说STATIC_ROOT之前,必须得提一下MEDIA_ROOT,在配置中,当你需要在你的项目中按照你心中的目录来存储文件时,MEDIA_ROOT是必不可少的。 # 文件存储配置 MEDIA_URL = ‘/media/’ MED…

    Django 2023年4月11日
    00
  • Django之url定义和ORM框架的使用

    前言,Django安装 pip install django # 官网安装最新版本 pip install django -i “https://pypi.doubanio.com/simple/” # 指定安装源 pip install django –upgrate # 更新Django pip uninstall django # 卸载django …

    Django 2023年4月11日
    00
  • django页面跳转问题及注意事项

    Django 页面跳转问题及注意事项 在 Django 框架中,实现页面跳转是常见的需求,如果处理不当,就会出现一些问题,本篇攻略将详细讲解 Django 页面跳转问题及注意事项。 1. 页面跳转方式 在 Django 中,实现页面跳转主要有以下两种方式: 1.1 HttpResponseRedirect HttpRedirect 是基于 HTTP 协议的一…

    Django 2023年5月16日
    00
  • Django admin实现图书管理系统菜鸟级教程完整实例

    我会提供详细的攻略,包含两个示例说明。 示例一:安装Django 首先,我们需要安装Django。我们可以通过以下步骤来完成: 确定Python版本:Django要求Python 3.6及以上版本。可以通过运行以下命令确定Python版本: python -V 安装pip:pip是Python包管理器,我们可以使用pip来安装Django。在终端中运行以下命…

    Django 2023年5月16日
    00
  • django的form常用字段和参数

    Django 的内置字段 Field required=True#请求不能为空 widget=None#HTML插件 label=None#用于生成lable标签或显示内容 initial=None#初始值 help_text=”#帮助信息(在标签旁边显示) error_messages=None#(错误信息{‘required’:’不能为空’,‘inva…

    Django 2023年4月13日
    00
  • Django多数据库配置及逆向生成model教程

    Django是流行的Web框架之一,它可以简化开发Web应用的过程。在实际项目中,我们可能需要使用多个数据库或者使用反向工程来自动生成模型代码。下面是Django多数据库配置及逆向生成model的完整攻略,包含两条示例说明。 配置多个数据库 Django默认只配置一个数据库,但是我们可以通过在settings.py中添加多个数据库配置来实现多个数据库的支持。…

    Django 2023年5月15日
    00
  • Django结合Websocket进行WebSSH的实现

    什么是webssh?   泛指一种技术可以在网页上实现一个 终端。从而无需 之类的模拟终端工具进行 连接,将 这一比较低层的操作也从 架构扭成了 架构 这样的架构常用在运维制作开发一些堡垒机等系统中,或是目前比较新型的在线教育方式,通过向学生提供一个可以直接使用浏览器进行相关 操作或代码编写的学习方式 主要是建立客户端与服务端的即时通信 模型 此种 实现方式…

    Django 2023年4月13日
    00
  • python 配置uwsgi 启动Django框架的详细教程

    下面给您详细讲解如何通过配置uwsgi来启动Django框架。 一、安装uwsgi 首先需要安装uwsgi,可以通过以下命令进行安装: sudo pip install uwsgi 二、Django项目配置 接下来,需要对Django项目进行配置。假设我们的Django项目目录为/path/to/project,对应的Django应用为myapp。 首先,在…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部