ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django中使用分页功能

2022-08-07 16:33:47  阅读:222  来源: 互联网

标签:index 功能 分页 models Django import django pages page


Django中使用分页功能

(1) 创建一个名为MyDjango的项目,再创建一个名为index的app,在settings.py中注册改app,配置数据库

(2) 在index的models.py中定义模型PersonInfo,并执行数据迁移

from django.db import models

class PersonInfo(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=20)
    age = models.IntegerField()

(3) 在MyDjango和index的urls.py中定义路由信息

# MyDjango的urls.py
from django.urls import path, include

urlpatterns = [
    path('', include(('index.urls', 'index'), namespace='index')),
]
# index的urls.py
from django.urls import path
from .views import *

urlpatterns = [
    path('<page>/', index, name='index'),
]

(4) 在index的views.py中定义视图函数index,视图函数查询模型PersonInfo的所有数据,并进行分页处理

from django.shortcuts import render
from django.core.paginator import Paginator
from django.core.paginator import EmptyPage
from django.core.paginator import PageNotAnInteger
from .models import PersonInfo


def index(request, page):
    # 获取模型PersonInfo的全部数据
    person = PersonInfo.objects.all().order_by('-age')
    # 设置每一页的数据量为2
    p = Paginator(person, 2)
    try:
        pages = p.page(page)
    except PageNotAnInteger:
        # 如果参数page的数据类型不是整型,就返回第一页数据
        pages = p.page(1)
    except EmptyPage:
        # 若用户访问的页数大于实际页数,则返回最后一页的数据
        pages = p.page(p.num_pages)
    return render(request, 'index.html', locals())

(5) 在templates文件夹中创建index.html,内容如下:

<!DOCTYPE html>
<html lang="zh-hans">
<head>
    {% load static %}
    <title>分页功能</title>
    <link rel="stylesheet" href="{% static "css/base.css" %}"/>
    <link rel="stylesheet" href="{% static "css/lists.css" %}">
</head>
<body class="app-route model-hkrouteinfo change-list">
<div id="container">
    <div id="content" class="flex">
        <h1>分页功能</h1>
        <div id="content-main">
            <div class="module filtered" id="changelist">
                <form id="changelist-form" method="post">
                    <div class="results">
                        <table id="result_list">
                            <thead>
                            <tr>
                                <th class="action-checkbox-column">
                                    <div class="text">
                                        <span><input type="checkbox"/></span>
                                    </div>
                                </th>
                                <th><div class="text">姓名</div></th>
                                <th><div class="text">年龄</div></th>
                            </tr>
                            </thead>
                            <tbody>
                            {% for p in pages %}
                                <tr>
                                    <td class="action-checkbox">
                                        <input type="checkbox" class="action-select">
                                    </td>
                                    <td>{{ p.name }}</td>
                                    <td>{{ p.age }}</td>
                                </tr>
                            {% endfor %}
                            </tbody>
                        </table>
                    </div>
                    <p class="paginator">
                        {# 上一页的路由地址 #}
                        {% if pages.has_previous %}
                            <a href="{% url 'index:index' pages.previous_page_number %}">上一页</a>
                        {% endif %}
                        {# 列出所有的路由地址 #}
                        {% for n in pages.paginator.page_range %}
                            {% if n == pages.number %}
                                <span class="this-page">{{ pages.number }}</span>
                            {% else %}
                                <a href="{% url 'index:index' n %}">{{ n }}</a>
                            {% endif %}
                        {% endfor %}
                        {# 下一页的路由地址 #}
                        {% if pages.has_next %}
                            <a href="{% url 'index:index' pages.next_page_number %}">下一页</a>
                        {% endif %}
                    </p>
                </form>
            </div>
        </div>
    </div>
</div>
</body>
</html>

最后启动服务访问即可查看到分页效果。当然也可以自己封装分页组件。

标签:index,功能,分页,models,Django,import,django,pages,page
来源: https://www.cnblogs.com/minqiliang/p/16559281.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有