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日

相关文章

  • 全面剖析Python的Django框架中的项目部署技巧第1/2页

    我将为你详细讲解“全面剖析Python的Django框架中的项目部署技巧第1/2页”的完整攻略。 标题 全面剖析Python的Django框架中的项目部署技巧第1/2页 正文 项目部署技巧概述 在Python的Django框架中进行项目部署是很常见的需求,但是部署过程中常会出现各种问题。本文将全面剖析Django项目部署中的关键技巧和注意事项,以帮助开发者成…

    Django 2023年5月16日
    00
  • 【django后端分离】mysql原生查询命令后,RawQueryset类型的自定义序列化返回json格式

    1:设置mysql原生分页 # 监控系统首页显示分页 def MyPagination(limitid,offsetid): limitid =str(limitid) offsetid =str(offsetid)   # 这里是mysql原生代码 show_goods = “select dal_keywordtable.* from (select a…

    Django 2023年4月12日
    00
  • 在django admin中添加自定义视图

    来自https://blog.csdn.net/qq_35753140/article/details/84881757   django admin提供了完善的用户管理和数据模型管理,方便实用。研究了一下在admin里面添加自己的页面。 在admin.py里继承django.contrib.admin.ModelAdmin基类 class FaceAdmi…

    Django 2023年4月10日
    00
  • 4-Django开发post、get接口

    一、创建django应用程序 方法一:创建django项目时直接创建应用程序     方法二:命令行创建 1、进入manage.py所在目录 2、执行常见命令:python manage.py startapp web   二、启动manage.py 方法一:在parcharm中配置manage.py启动参数为runserver 127.0.0.1:8000…

    Django 2023年4月13日
    00
  • django系列6–Ajax05 请求头ContentType, 使用Ajax上传文件

    ContentType指的是请求体的编码类型,常见的类型共有三种: 1.application/x-www-form-urlencoded 这应该是最常见的 POST 提交数据的方式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 默认格式application/x-www-form-urlencoded 方…

    2023年4月9日
    00
  • Python的Django框架使用入门指引

    Python的Django框架使用入门指引 什么是Django Django是一个高级Web应用框架,使用Python编写。它帮助开发人员轻松地构建和维护复杂的Web应用程序。Django相对于其他Web框架的优势在于它的可扩展性,开发速度快和安全性高。 Django的安装 要安装Django,您需要安装Python。在安装Python之后,可以在命令行中使…

    Django 2023年5月16日
    00
  • Django分页和查询参数的问题

    查询是通过get的方式,之前没有分页之前,url是这样的: http://hostname/search?query=port%3A8080 那么我的想法是如果分页了。 1,不带page参数了。next之后就加载下一页的内容 http://hostname/search?query=port%3A8080 请问这个是通过post传参吗? 2,使用官方文档中的…

    Django 2023年4月12日
    00
  • Django-权限信息中间件操作

    # 在当前app下新建一个middleware的文件夹,然后就可以尽情的写中间件了,只能是这个名字,切记~@!import re from django.shortcuts import redirect,HttpResponse from django.conf import settings class MiddlewareMixin(object): …

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