Django入门到放弃之分页器

简介: Django入门到放弃之分页器

1.属性和方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#######1 Paginator对象的属性和方法

    book_list=models.Book.objects.all() # 注意all操作实际是分批次获取数据,当前版本为limit 21

    # 实例化得到对象

    # 第一个参数:要分页的数据,book_list

    # 第二个参数:没有条数

    paginator=Paginator(book_list,10# 分页的数据  每页展示的数据个数

    # Paginator对象的属性和方法

    print(paginator.per_page) # 每页显示的条数

    print(paginator.count) # 总条数,总共要分页多少条数据

    print(paginator.num_pages) # 总页码数

    print(paginator.page_range) # 页码数生成器 rang(1,总页数+1)

    

    

######3 Page对象的属性和方法

    # Page类 的对象 

    page=paginator.page(2)   #  第一页的对象

    

    # 每一页的对象,属性和方法

    print(page.count())      # 每一页的页码数

    print(page.has_next())      # 有没有下一页

    print(page.next_page_number()) # 下一页页码

    print(page.has_previous())  # 是否有上一页

    print(page.previous_page_number()) # 上一页页面 (当前页如果是第一页,没有上一页)

    print(page.object_list)            # 当前页的所有数据

    print(page.number)           # 当前页的页码数

2.示例:  

urls.py

1

2

3

4

5

6

from app01 import views

urlpatterns = [

    path('admin/', admin.site.urls),

    path('', views.index,name='index'),

    path('test', views.test,name='test'),

]

view.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

from django.shortcuts import render, HttpResponse, reverse, redirect

from django.core.paginator import Paginator

from app01 import models

 

 

# Create your views here.

 

def index(request):

    # 设置跳转的页面,default=1为直接访问首页时初始化的值

    page_num_int = int(request.GET.get('page',default=1)) 

    book_list = models.Book.objects.all()  # 注意all操作实际是分批次获取数据,当前版本为limit 21

 

    # 实例化对象

    # 设置每页展示的数据个数,默认为10

    per_page = int(request.GET.get('per_page',default=10))

    paginator = Paginator(book_list, per_page)  # 分页的数据  每页展示的数据个数

 

    # 如果总页数大于 展示个数+1 情况下,如果跳转的页面小于5则直接显示 1-10页,如果跳转的页面+5大于总页数则显示最后10页,否则显示当前页前5后5页

    # 如果总页数小于 展示个数+1 情况下,则展示全部页数

    if paginator.num_pages > 11:

        if (page_num_int - 5) < 1:

            page_range = range(1,11)

        elif page_num_int + 5 > paginator.num_pages:

            page_range = range(paginator.num_pages - 10,paginator.num_pages + 1)

        else:

            page_range = range(page_num_int - 5, page_num_int + 5# 页码数生成器 rang(1,总页数+1)

    else:

        page_range = paginator.page_range

    page_obj = paginator.page(page_num_int)

 

 

    return render(request, 'index.html'locals())

index.html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Title</title>

    <script src="/static/jquery-3.3.1/jquery-3.3.1.min.js"></script>

    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">

    <style>

        # 设置placeholder字体颜色

        input::-webkit-input-placeholder{

            color:rgb(51122183);

        }

        input::-moz-placeholder{   /* Mozilla Firefox 19+ */

            color:rgb(51122183);

        }

        input:-moz-placeholder{    /* Mozilla Firefox 4 to 18 */

            color:rgb(51122183);

        }

        input:-ms-input-placeholder{  /* Internet Explorer 10-11 */

            color:rgb(51122183);

        }

 

        .pg {

            line-height: 26px;

        }

 

        #jump,#per_page_num {

            padding: -1px;

            margin: -1px;

            border: 1px solid rgb(221221221);

            width: 70px;

            line-height: 30px;

            font-size: 14px;

            color: rgb(51122183);

        }

 

        #x1,#x2 {

            padding: 0;

        }

 

    </style>

</head>

<body>

<div class="container-fluid">

    <div class="row">

        <div class="col-md-8 col-md-offset-2">

            <table class="table">

                <thead>

                <tr>

                    <th>ID</th>

                    <th>名称</th>

                    <th>价格</th>

                </tr>

                </thead>

                <tbody>

                

                # 获取当前页所有数据,循环替换

                {% for page in page_obj.object_list %}

                    <tr>

                        <td>{{ page.id }}</td>

                        <td>{{ page.name }}</td>

                        <td>{{ page.price }}</td>

                    </tr>

                {% endfor %}

                </tbody>

            </table>

 

            <div class="text-center">

                <nav aria-label="Page navigation">

                    <ul class="pagination pg">

                    # 如果当前页有上一页(跳转到首页),则跳转否则禁止点击

                        {% if page_obj.has_previous %}

                            <li>

                                {#    <a href="/?page={{ page_obj.previous_page_number }}" aria-label="Previous">#}

                                <a href="/?page=1&per_page={{ per_page }}" aria-label="Previous">

                                    <span aria-hidden="true">«</span>

                                </a>

                            </li>

                        {% else %}

                            <li class="disabled">

                                <a href="" aria-label="Previous">

                                    <span aria-hidden="true">«</span>

                                </a>

                            </li>

                        {% endif %}

 

                    # 分页a标签添加跳转链接,当前页添加active属性

                        {% for page_num in page_range %}

                            {% if page_num_int == page_num %}

                                <li class="active"><a href="/?page={{ page_num }}">{{ page_num }}</a></li>

                            {% else %}

                                <li><a href="/?page={{ page_num }}&per_page={{ per_page }}">{{ page_num }}</a></li>

                            {% endif %}

                        {% endfor %}

 

                        #如果不是最后一页则展示,否则不展示

                        {% if page_num_int != paginator.num_pages  %}

                             <li><a href="/?page={{ paginator.num_pages }}&per_page={{ per_page }}">... {{ paginator.num_pages }}</a></li>

                        {% endif %}

 

                    # 如果有下一页则跳转,否则禁用

                        {% if page_obj.has_next %}

                            <li>

                                {#    <a href="/?page={{ page_obj.next_page_number }}" aria-label="Next">#}

                                <a href="/?page={{ paginator.num_pages }}&per_page={{ per_page }}" aria-label="Next">

                                    <span aria-hidden="true">»</span>

                                </a>

                            </li>

                        {% else %}

                            <li class="disabled">

                                <a href="" aria-label="Next">

                                    <span aria-hidden="true">»</span>

                                </a>

                            </li>

                        {% endif %}

 

                        # 设置跳转

                        <li>

                               <span id="x1"><input type="text"   id="jump" size="2" title="输入页码,按回车快速跳转"   placeholder="{{ page_num_int }}/ {{ paginator.num_pages }} 页"

                                       onkeydown="if(event.keyCode===13) {window.location='?page='+this.value+'&per_page={{ per_page }}'; doane(event);}">

                                     </span>

                        </li>

 

                        # 设置分页个数

                        <li>

                               <span id="x2">

                                   <input type="text" id="per_page_num" size="2" placeholder=" 条数:{{ per_page }}"

                                       onkeydown="if(event.keyCode===13) {window.location='?page='+ '{{ page_num_int }}&per_page=' + this.value; doane(event);}">

                               </span>

                        </li>

                    </ul>

                </nav>

 

            </div>

        </div>

    </div>

</div>

 

</body>

</html>


相关文章
|
3月前
|
Java API 数据库
Django:从入门到精通
【11月更文挑战第18天】Django是一个由Python编写的高级Web应用框架,以其简洁性、安全性和高效性而闻名。Django最初由Adrian Holovaty和Simon Willison于2003年开发,旨在简化Web应用的开发过程。作为一个开放源代码项目,Django迅速吸引了大量的开发者和用户,成为了Python Web开发领域的重要工具之一。
97 1
|
4月前
|
存储 Shell 数据库
Python编程--Django入门:用户账户(二)
Python编程--Django入门:用户账户(二)
73 2
|
4月前
|
存储 数据库 Python
Python编程--Django入门:用户账户(一)
Python编程--Django入门:用户账户(一)
53 1
|
6月前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
412 0
|
6月前
|
开发框架 安全 数据库
解锁Django框架神秘面纱!从入门到实战,掌握这些技巧,让你的Web应用秒变高效神器!
【8月更文挑战第31天】Django 是 Python 的明星 Web 开发框架,以其高效、安全及可扩展性著称,适用于构建各类 Web 应用。本文从 Django 基础概念出发,介绍其 MTV 架构,涵盖模型(Model)、模板(Template)、视图(View)等核心组件,并通过示例代码展示实际应用。此外,还将探讨路由配置、管理界面及实战技巧,帮助读者全面掌握 Django,为高效 Web 开发打下坚实基础。
73 0
|
6月前
|
关系型数据库 MySQL 机器人
Django入门到放弃之数据库配置
Django入门到放弃之数据库配置
|
6月前
|
缓存 中间件 数据库
Django入门到放弃之缓存及信号机制
Django入门到放弃之缓存及信号机制
|
6月前
|
前端开发 数据库 数据安全/隐私保护
Django入门到放弃之Auth模块
Django入门到放弃之Auth模块
|
6月前
|
JSON 前端开发 数据安全/隐私保护
Django入门到放弃之CSRF_TOKEN
Django入门到放弃之CSRF_TOKEN
|
6月前
|
前端开发 中间件 索引
Django入门到放弃之中间件
Django入门到放弃之中间件