Django中ListView分页技术

发布时间:2019-09-23 21:02--阅读:578--评论:1条

Django中分页非常方便,通过Pagination你可以很方便达到分页效果。今天主要说的是基础视图中ListView的分页处理,本质还是依赖与Pagination。

数据模型:models.py

    from django.db import models
    from django.contrib.auth.models import User
    # Create your models here.
    class Msg(models.Model):
        title = models.CharField(max_length = 30)
        content = models.TextField()
        user = models.ForeignKey(User)
        ip = models.IPAddressField()
        datetime = models.DateTimeField(auto_now_add = True)
        click_count = models.IntegerField(default = 0)
views.py

 from django.views.generic import ListView
 from msg_board.models import Msg
 ITEMS_PER_PAGE = 1
          
 class MsgList(ListView):
     model = Msg#数据模型
     context_object_name = 'msg_list'#模板中变量
     template_name = 'index.html'#模板文件
     paginate_by = ITEMS_PER_PAGE#一个页面显示的条目
urls.py

urlpatterns = [ 
    re_path(r'^list/(?P<pk>[0-9]+)$', views.MsgListView.as_view(), ),
]
模板:index.html

<html>
    <head><title>msg_board</title>
    <style type="text/css">
    table{border:3 solid black; border-collapse:collapse}
    table th, table td{border:2 solid black}
    </style>
     
    </head>
    <body>
    <h3>Message:</h3>
    {% if msg_list %}
        <table id = "msgs">
            <tr>
                <th>Title</th>
                <th>Content</th>
                <th>Author</th>
                <th>Ip</th>
                <th>Time</th>
                <th>Click</th>
            </tr>
        {%for msg in msg_list %}
            <tr>
                <td>{{msg.title}}</td>
                <td>{{msg.content}}</td>
                <td>{{msg.user}}</td>
                <td>{{msg.ip}}</td>
                <td>{{msg.datetime}}</td>
                <td>{{msg.click_count}}</td>
            </tr>
        {% endfor%}
        </table>
        {% if is_paginated %}
        <div class="pagination">
            <span class="page-links">
                {% if page_obj.has_previous %}
                    <a href="/mysite?page={{ page_obj.previous_page_number }}">上一页</a>
                {% endif %}
                {% if page_obj.has_next %}
                    <a href="/mysite?page={{ page_obj.next_page_number }}">下一页</a>
                {% endif %}
                <span class="page-current">
                    第{{ page_obj.number }}页 ,工{{ page_obj.paginator.num_pages }}页。
                </span>
            </span>
        </div>
        {%endif%}
    {% else %}
    <p>No msgs !!!</p>
    {% endif %}
    </body>
    </html>

效果图:

page_obj是分页对像实例,这个名字是ListView默认生成的

page_obj的变量:

page_obj.paginator.page_range:所有分页的number,是一个list

page_obj.number:当前分页的页码

page_obj.paginator.num_pages:总分页数,就是一共有多少页

page_obj的方法:

page_obj.has_previous():判断是否有上一页

page_obj.previous_page_number():返回上一页的number

page_obj.has_next():判断是否有下一页

page_obj.next_page_number():返回下一页的number

 

为Django网站添加favicon.ico图标微信公众号ID(feiutech)

微信公众号ID:feiutech

评论列表

14楼:lateral decubitus Hvwlli https://newfasttadalafil.com/ - Cialis <a href=https://newfasttadalafil.com/>Cialis</a> Generic Viagra By Phone The small bronchial branches are the bronchioles. Jpxtyo https://newfasttadalafil.com/ - cialis online without

Brogrer 于2022-06-13 12:18

共1条评论

我要评论

用户名:
邮箱: