Django实现分页功能

yizhihongxing

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– 配置media文件

    media文件夹是我们下载东西后存放数据的主要存放处..十分重要 一:配置media文件:  media的配置和static十分相似,但也有一些不同的地方 1,首先在应用里面创建media文件     2,在settings里面配置media文件的路径 在settings里面配置主要分为两步,和static相似 MEDIA_ROOT=os.path.join…

    Django 2023年4月12日
    00
  • django云端留言板实例详解

    一、Django云端留言板实例详解 这篇文章将详细讲解如何使用Django创建一个云端留言板的实例。 安装Django和必要的数据库驱动 在开始之前,需要先安装Django以及相应的数据库驱动。可以通过以下命令安装: pip install Django pip install django-mysql 创建Django项目 使用Django创建一个新项目,…

    Django 2023年5月15日
    00
  • django与python版本对应关系 附加djangorestframework框架

    Django与python版本 Django 1.11版本兼容Python 2.7、3.4、3.5、3.6、3.7(added in 1.11.17)# 1.11.5 python<=3.6 Django 2.0版本兼容Python 3.4、3.5、3.6、3.7 Django 2.1、2.2版本兼容Python 3.5、3.6、3.7 Django …

    Django 2023年4月13日
    00
  • Django多app路由分发(纯后端)

    下面是对于“Django多app路由分发(纯后端)”的详细讲解。 什么是Django多app路由分发 在一个Django项目中可以包含多个app,每个app有自己的职责和功能。使用Django多app路由分发可以实现让不同的url请求被不同的app处理。这样可以让项目更加模块化,易于维护。 如何实现Django多app路由分发 要实现Django多app路由…

    Django 2023年5月16日
    00
  • django基础之day08,利用bulk_create 批量插入成千上万条数据

    bulk_create批量插入数据 models.py文件 class Book(models.Model): title=models.CharField(max_length=32) urls.py文件 from app01 import views urlpatterns = [ url(r’^admin/’, admin.site.urls), #首…

    Django 2023年4月12日
    00
  • 使用Django2.0打造小程序助手

    打造个人助手 主角: Django2.0 微信小程序(2017年元旦发布) 技术要求: python3开发基础 Django开发基础 HTML+CSS+JS 开发环境: Python开发环境:Python3.5+pycharm 小程序开发环境:微信开发者工具 系统开发环境:Windows(开发)+linux(部署) 依赖环境&工具 Postman(模…

    Django 2023年4月9日
    00
  • Python Django ORM与模型详解

    “Python Django ORM与模型详解”的完整攻略可以分为以下几个部分: 1. 概述 Django是一套MVC框架,它提供了ORM(Object-Relational Mapping)技术,ORM可以将数据库中的表结构映射成Python类,这样我们在Python中就可以使用类来操作数据库。 2. 配置 要使用Django ORM,我们首先需要在set…

    Django 2023年5月16日
    00
  • docker 部署django方式

    1 docker 部署django应用 1.1 基于python基础镜像 # 第一种方式:基于python基础镜像来做 cd /home mkdir myproject cd myproject docker run -di –name=myproject -p 8080:8080 -v /home/myproject:/home python:3.6 #…

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