django的分页
一.分页器的函数封装
# 分页计算最小页和最大页
def page_list_return(total, current=1):
'''
分页,返回本次分页的最小页数和最大页数列表
:param total:
:param current:
:return:
'''
min_page = current - 2 if current - 4 > 0 else 1
max_page = current + 4 if current + 4 < total else total
return list(range(min_page, max_page + 1)) # 分页器
def pages(post_objects, request):
'''
分页公共函数,返回分页的对象元组
:param post_objects:
:param request:
:return:
'''
# 分页器
paginator = Paginator(post_objects, 10)
try:
# 本页页码
current_page = int(request.GET.get('page', ''))
except ValueError:
current_page = 1
# 所有页码
page_range = page_list_return(len(paginator.page_range), current_page)
try:
# 本页对象
page_objects = paginator.page(current_page)
except (EmptyPage, InvalidPage):
page_objects = paginator.page(paginator.num_pages) if current_page >= 5:
show_first = 1
else:
show_first = 0
if current_page <= (len(paginator.page_range) - 3):
show_end = 1
else:
show_end = 0
# 所有对象,分页器,本页对象,所有页码,本业页码,是否显示第一页,是否显示最后一页
return post_objects, paginator, page_objects, page_range, current_page, show_first, show_end
二.view页面的传递
def menu_list(request):
header_title, path = '菜单详情', '菜单详情'
menus_list = MenuInfo.objects.all()
menus_list, p, page_obj, page_range, current_page, show_first, show_end = pages(menus, request)
return render(request, 'menu/menu_list.html',locals())
三.前端页面的代码
<div class="col-sm-7">
<div class="dataTables_paginate paging_simple_numbers" id="editable_paginate">
<ul class="pagination">
{% if page_obj.has_previous %}
<li class="paginate_button previous " id="editable_previous">
<a class="page" href="?page={{ page_obj.previous_page_number }}" aria-controls="editable"
data-dt-idx="0"
tabindex="0">上一页</a>
</li> {% else %}
<li class="paginate_button previous disabled" id="editable_previous">
<a class="page" aria-controls="example1" data-dt-idx="0" tabindex="0">上一页</a>
</li>
{% endif %}
{% ifequal show_first 1 %}
<li class="paginate_button">
<a class="page" href="?page=1" aria-controls="editable" data-dt-idx="1" tabindex="0">1..</a>
</li>
{% endifequal %} {% for page in page_range %}
{% ifequal current_page page %}
<li class="paginate_button active">
<a class="page" href="?page={{ page }}" aria-controls="editable" data-dt-idx="1" tabindex="0"
title="第{{ page }}页">{{ page }}</a>
</li>
{% else %}
<li class="paginate_button">
<a class="page" href="?page={{ page }}" aria-controls="editable" data-dt-idx="1" tabindex="0"
title="第{{ page }}页">{{ page }}</a>
</li>
{% endifequal %} {% endfor %}
{% ifequal show_end 1 %}
<li class="paginate_button">
<a class="page" href="?page={{ p.num_pages }}" aria-controls="editable" data-dt-idx="1" tabindex="0"
title="第{{ page }}页">...{{ p.num_pages }}</a>
</li>
{% endifequal %}
{% if page_obj.has_next%}
<li class="paginate_button next " id="editable_next">
<a class="page" href="?page={{ page_obj.next_page_number }}" aria-controls="editable"
data-dt-idx="1"
tabindex="0">下一页</a>
</li>
{% else %}
<li class="paginate_button next disabled " id="editable_next">
<a class="page" aria-controls="editable"
data-dt-idx="1"
tabindex="0">下一页</a>
</li>
{% endif %} </ul>
</div>
</div>
django的分页的更多相关文章
- 第二十一章 Django的分页与cookie
第二十一章 Django的分页与cookie 第一课 模板 1.模板的继承 在Template目录下新建模板master.html <!DOCTYPE html> <html lan ...
- Python Django的分页,Form验证,中间件
本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...
- Django----列表分页(使用Django的分页组件)
目的:是为了实现列表分页 1.定制URL http://127.0.0.1:8000/blog/get_article?page=3之前定制URL是在url后增加了/id,这次使用参数的方式 def ...
- Django—自定义分页
分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...
- Django自定义分页并保存搜索条件
Django自定义分页并保存搜索条件 1.自定义分页组件pagination.py import copy class Pagination: def __init__(self, current_p ...
- Django DRF 分页
Django DRF 分页 分页在DRF当中可以一共有三种,可以通过setttings设置,也可也通过自定义设置 PageNumberPagination 使用URL http://127.0.0.1 ...
- django之分页,纯python代码
Django中分页 py文件代码 """ 自定义分页组件 可以返回分页的数据和分页的HTML代码 """ from django.http ...
- django之分页、cookie装饰器
一.分页代码如下 from django.utils.safestring import mark_safe class Page: def __init__(self, current_page, ...
- django的分页--不全也未实现
一.Django内置分页 Paginator 二.自定义分页 分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该在数据库表中的起始位置. 1.设定每页显示数据条数 2.用户输 ...
- Django自定义分页、bottle、Flask
一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1"> ...
随机推荐
- block fomating context
http://www.w3help.org/zh-cn/kb/010/ 它与普通的块框类似,不同之处在于: 1可以包含浮动元素 2可以阻止外边距折叠 3可以防止元素被浮动元素覆盖 placeholde ...
- Leetcode Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- [MySQL] B+树索引
B+树是一种经典的数据结构,由平衡树和二叉查找树结合产生,它是为磁盘或其它直接存取辅助设备而设计的一种平衡查找树,在B+树中,所有的记录节点都是按键值大小顺序存放在同一层的叶节点中,叶节点间用指针相连 ...
- listview改变单个单元格的背景色
ListViewItem lvi = listView1.Items[1]; lvi.UseItemStyleForSubItems = false; System.Windows.Forms.Lis ...
- python中文注释报错问题
错误信息: SyntaxError: Non-ASCII character '\xe4' in file... 解决办法: 在文件第一行或第二行添加:# -*- coding: utf-8 -*- ...
- [LintCode] Delete Node in the Middle of Singly Linked List 在单链表的中间删除节点
Implement an algorithm to delete a node in the middle of a singly linked list, given only access to ...
- Final-阶段站立会议6
组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...
- DS实验题 融合软泥怪-1
题目 思路 很容易想到第一种做法,用Huffman算法,从森林中找出两个值最小的节点,合并再加入森林,在这个过程中不断记录. 但是每一次需要sort一遍,将最小的两个值节点置于头两个节点,最坏情况下复 ...
- LoadRunner - 001
lr_eval_string():函数的主要作用:返回脚本中的一个参数当前的值,返回值类型:char一般多用在调试脚本时输出参数的值.具体用法如下:lr_output_message("Th ...
- node.js环境
1.首先获得node环境 node -v; 2.判断node包管理器的版本 npm-v;查看node包管理器的版本; 3.npm install -g express 安装node.js的web开发框 ...