django MsSql 分页

MsSql 的分页:

 

PageInfo 分页类
复制代码
class PageInfo(object):

    def __init__(self, current_page, all_count, per_page, base_url, show_page=11):
        """
        :param current_page: 当前页码,用request.GET.get('page')方式获取
        :param all_count: 数据库总行数
        :param per_page:  每页显示的行数
        :param show_page:  页面显示多少个页码,默认为 当前页的前5页和后5页一共11页
        :param base_url: 动态路径
        """
        try:  # 判断一下,如果当前页不是数字,则显示第一页
            self.current_page = int(current_page)
        except Exception as e:
            self.current_page = 1
        self.per_page = per_page

        a, b = divmod(all_count, per_page)  # 计算一共有多少页 divmode函数看b是否大于0
        if b:  # 如果为真,即,b 这个余数大于0,则 页码+1页
            a = a + 1
        self.all_pager = a
        self.show_page = show_page
        self.base_url = base_url

    def strat(self):
        return (self.current_page - 1) * self.per_page

    def end(self):
        return self.current_page * self.per_page

    def pager(self):  # 该函数在前端模板中会自动执行
        # v = "<a href = '/custom.html?page=1/'>1</a>"
        # return v
        page_list = []

        half = int((self.show_page - 1) / 2)

        # 如果数据库总页数 < 11
        if self.all_pager < self.show_page:
            begin = 1
            stop = self.all_pager + 1
        else:  # 如果数据库总页数 > 11
            # 如果当前页 <=5 , 永远显示1到11页
            if self.current_page <= half:
                begin = 1
                stop = self.show_page + 1
            else:
                if self.current_page + half > self.all_pager:
                    begin = self.all_pager - self.show_page + 1
                    stop = self.all_pager + 1
                else:
                    begin = self.current_page - half
                    stop = self.current_page + half + 1

        # 上一页
        if self.current_page <= 1:
            prev = "<li><a href = '#'>上一页</a></li>"
        else:
            prev = "<li><a href = '%s?page=%s'>上一页</a></li>" % (
                self.base_url, self.current_page - 1)
        page_list.append(prev)

        for i in range(begin, stop):
            if i == self.current_page:
                # temp = "<a style='display:inline-block;padding:5px;margin:5px;background-color:blue;' href = '%s?page=%s'>%s</a>" % (
                temp = "<li class='active'><a href = '%s?page=%s'>%s</a></li>" % (
                    self.base_url, i, i)
            else:
                temp = "<li><a href = '%s?page=%s'>%s</a></li>" % (
                    self.base_url, i, i)
            page_list.append(temp)

        # 下一页
        if self.current_page >= self.all_pager:
            next = "<li><a href = '#'>下一页</a></li>"
        else:
            next = "<li><a href = '%s?page=%s'>下一页</a></li>" % (
                self.base_url, self.current_page + 1)
        page_list.append(next)

        return ''.join(page_list)
复制代码

 

view.py内容

复制代码
from utils.pages import PageInfo  #引入分页类
def custom(request):
  

   #写原生Sql语句 取总记录数数 from django.db import connection cursor = connection.cursor() cursor.execute('select count(*) from Message where id>%s and mtype=4', [1]) all_count = cursor.fetchone() for row in all_count: all_count = row # 取总数据记录

page_info = PageInfo(request.GET.get('page'), all_count, 30, '/custom.html') # 拿到PageInfo类中的页码信息 cursor.execute('select id,mtitle,mtype from Message where id>%s and mtype=4 order by id', [1]) # 取内容,这里取到的是一个 元祖列表 # 将元祖列表 转换成字典列表 def dict_fetchall(cursor): "将游标返回的结果保存到一个字典对象中" desc = cursor.description return [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()[page_info.strat():page_info.end()] ] user_list = dict_fetchall(cursor) # print(user_list) return render(request, 'custom.html', {'user_list': user_list, 'page_info': page_info})
复制代码

 

前端页面 custom.html

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
</head>
<body>
<ul>
    {% for rows in user_list %}
        <li>{{ rows.id }}-----{{ rows.mtype }}-----{{ rows.mtitle }}</li>    {% endfor %}
</ul>

<nav aria-label="Page navigation">
    <ul class="pagination">
        {{ page_info.pager|safe }}
    </ul>
</nav>

</body>
</html>
复制代码

 

posted @   茶叶蛋蛋  阅读(140)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示