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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了