django-paginator
py code...
from django.core.paginator import Paginator class NewsListView(View):
def get(self, request):
'''分页'''
page = int(request.GET.get('page', 1)) # 第多少页,默认1
print(page)
newses = News.objects.select_related("category", "author").all()
categories = NewsCategory.objects.all() p = Paginator(newses, 5) # 每页显示n条数据
page_obj = p.page(page) # 第n页的 page对象 <Page 1 of n> current_page_newses = page_obj.object_list # not func!! 当前页的newes所有数据 设置的是显示一条data
context = {
'newses': page_obj.object_list,
'categories': categories,
'p': p,
'current_page': page
}
context.update(self.get_paging_data(p , page_obj, show_pages=2, page=page))
return render(request, 'cms/news_list.html', context=context) def get_paging_data(self, paginator, page_obj, show_pages,page=None):
"""
分页当前页的左右范围
:param paginator: Paginator(obj, number)对象
:param page_obj: # 第n页的 page对象 <Page 1 of n> page_obj.number获取当前页
:param show_pages: 当前页左右展示的页数
:param page: 当前页 ps:可选参数
:return: 当前页左右显示的页数range对象 和 has_left(right)_more Bool值,用来判断是否显示 分页的省略号 ...
"""
current_page = page_obj.number
show_pages = show_pages
pages_number = paginator.num_pages has_left_more = False
has_right_more = False
# 左边的逻辑判断
print(current_page, 'c')
if current_page <= show_pages + 2:
left_start = 1
left_end = current_page
else:
has_left_more = True
left_start = current_page - show_pages
left_end = current_page
left_range = range(left_start, left_end)
# 右边的逻辑判断(在右边包括了当前页)
if current_page >= pages_number - show_pages - 1:
right_start = current_page
right_end = pages_number + 1
else:
has_right_more = True
right_start = current_page
right_end = current_page + show_pages + 1
right_range = range(right_start, right_end)
data = {
'left_range': left_range,
'right_range': right_range,
'has_left_more': has_left_more,
'has_right_more': has_right_more,
'current_page': current_page,
}
print(left_range, has_left_more)
return data
html code
<link rel="stylesheet" href="{% static 'adminlte/bower_components/bootstrap/dist/css/bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'adminlte/bower_components/font-awesome/css/font-awesome.min.css' %}">
<link rel="stylesheet" href="{% static 'adminlte/dist/css/AdminLTE.min.css' %}">
<link rel="stylesheet" href="{% static 'adminlte/dist/css/skins/_all-skins.min.css' %}">
<link rel="stylesheet" href="{% static 'sweetalert/sweetalert.css' %}">
<script src="{% static 'adminlte/bower_components/jquery/dist/jquery.min.js' %}"></script>
<script src="{% static 'adminlte/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
<script src="{% static 'adminlte/dist/js/adminlte.min.js' %}"></script>
<script src="{% static 'sweetalert/sweetalert.min.js' %}"></script>
<script src="{% static 'sweetalert/xfzalert.js' %}"></script>
<script src="{% static 'js/xfzajax.js' %}"></script>
<script src="{% static 'js/message.js' %}"></script>
{% block content %}
<div class="box">
<div class="box-header">
<form class="form-inline">
<div class="form-group">
<div class="pull-left margins">
<label for="start-input">时间:</label>
<input readonly class="form-control" type="text" id="start-input" placeholder="开始时间">
<span>-</span>
<input readonly class="form-control" type="text" placeholder="结束时间">
</div>
</div>
<div class="form-group margins">
<label for="title-input">标题:</label>
<input class="form-control" type="text" id="title-input" placeholder="关键字">
</div>
<div class="form-group margins">
<label for="">分类:</label>
<select class="form-control" name="" id="category-input">
{% for category in categories %}
<option value="">{{ category.name }}</option>
{% endfor %}
</select>
</div>
<div class="form-group margins">
<button class="btn btn-primary btn-sm clear-btn">查询</button>
</div>
<div class="form-group margins">
<a href="{% url 'cms:news_list' %}" class="btn btn-info btn-sm">清除查询</a>
</div>
</form>
</div>
<div class="box-body">
<table class="table table-bordered">
<thead>
<tr>
<th>标题</th>
<th>分类</th>
<th>发布时间</th>
<th>作者</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for news in newses %}
<tr>
<td>
<a href="{% url 'news:news_detail' news_id=news.pk %}">{{ news.title }}</a>
</td>
<td>{{ news.category.name }}</td>
<td>{{ news.pubtime | cms_date_filter }}</td>
<td>{{ news.author.username }}</td>
<td>
<button class="btn btn-warning btn-xs">编辑</button>
<button class="btn btn-danger btn-xs">删除</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="box-footer">
<span class="pull-left">第{{ current_page }}页/共{{ p.num_pages }}页</span>
<nav aria-label="Page navigation" class="pull-right">
<ul class="pagination">
{# 前一页 #}
{% if page_obj.has_previous %}
<li>
<a href="?page={{ page_obj.previous_page_number }}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{% else %}
<li class="disabled">
<span aria-hidden="true">«</span>
</li>
{% endif %}
{# 当前页左边部分 #}
{% if has_left_more %}
<li><a href="?page=1">1</a></li>
<li><span>...</span></li>
{% for page in left_range %}
<li><a href="?page={{ page }}">{{ page }}</a></li>
{% endfor %}
{% else %}
{% for page in left_range %}
<li><a href="?page={{ page }}">{{ page }}</a></li>
{% endfor %}
{% endif %}
{# 当前页右边部分 ,包括了当前页 #}
{% if has_right_more %}
{% for page in right_range %}
<li><a href="?page={{ page }}">{{ page }}</a></li>
{% endfor %}
<li><span>...</span></li>
<li><a href="?page={{ p.num_pages }}">{{ p.num_pages }}</a></li>
{% else %}
{% for page in right_range %}
<li><a href="?page={{ page }}">{{ page }}</a></li>
{% endfor %}
{% endif %}
{# 后一页 #}
{% if page_obj.has_next %}
<li>
<a href="?page={{ page_obj.next_page_number }}" aria-label="Next" class="disabled">
<span aria-hidden="true">»</span>
</a>
</li>
{% else %}
<li class="disabled">
<span aria-hidden="true">»</span>
</li>
{% endif %}
</ul>
</nav>
</div>
</div>
{% endblock %}
django-paginator的更多相关文章
- $Django Paginator分页器 批量创建数据
1批量插入数据: User_list=[]for i in range(100): User_list.append(User(name='小明%s'%i,pwd='abcdefg%s'%i))# 两 ...
- Django paginator and Form
django 提供的分页器 django 官方链接: https://docs.djangoproject.com/en/1.11/topics/pagination/ django提供了一些类来帮 ...
- django Paginator 让分页变得完美
参考大佬地址:https://www.zmrenwu.com/courses/django-blog-tutorial/materials/21/ 类视图 from django.contrib.au ...
- Django Paginator分页器
如何实现在django中实现分页效果,我使用的是django自带的分页器paginator具体是使用办法是这样的首先引用from django.core.paginator import Pagina ...
- Django——Paginator分页功能练习
1.路由urls.py from django.contrib import admin from django.urls import path from app01.views import in ...
- Django 之 Paginator 分页功能
Django Paginator Django 分页官方文档 https://docs.djangoproject.com/en/1.10/topics/pagination/ 此分页方法没有限制显 ...
- Django REST Framework API Guide 08
1.Filtering 2.Pagination FIltering GenericAPIView的子类筛选queryset的简单方法是重写.get_quueryset()方法. 1.根据当前用户进行 ...
- django之补充
一 QuerySet类型 QuerySet类型:只和orm有关,如果一涉及数据库,就会有QuerySet类型的出现. QuerySet切片操作:QuerySet是支持切片操作的,不过不能放负数.查询集 ...
- 利用rest-framework实现django应用的分页功能
自定义分页的类,继承 PageNumberPagination class StandardResultsSetPagination(PageNumberPagination): page_size ...
- django原生sql
参考:http://www.jb51.net/article/128257.htm coding=utf-8 from django.core.paginator import Paginator d ...
随机推荐
- 20155224 2016-2017-2 《Java程序设计》第5周学习总结
20155224 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 Java中的错误都会被打包为对象,可以尝试(try)捕捉(catch)代表错误的对象 ...
- com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. 问题解决方法
一.问题 今天用mybatis连接数据库时出现了如下错误: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The serve ...
- mongo dos操作
https://www.cnblogs.com/beileixinqing/p/8241822.html 基础1 https://blog.csdn.net/superjunjin/article/d ...
- 【HAOI2010】订货
可以DP也可以是费用流,然而被我用非常简单的DP破了[开心] 原题: 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定 ...
- ehci及其伴随ohci主机控制器驱动分析
1. 正常插入 插上U盘产生中断调用usb_hcd_irq: usb_hcd_irq ehci_irq usb_hcd_resume_root_hub queue_work(pm_wq, &h ...
- mysql学习--mysql必知必会
上图为数据库操作分类: 下面的操作參考(mysql必知必会) 创建数据库 运行脚本建表: mysql> create database mytest; Query OK, 1 row ...
- 使用ioctl获取网卡统计信息
ethtool -S获取接口统计信息总共分三步: 1.获取统计项个数,使用SIOCETHTOOL+ETHTOOL_GSSET_INFO 2.(可选)获取统计项名字,使用SIOCETHTOOL+ETHT ...
- WebApi_基于Token的身份验证——JWT
JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为: A.B.C A由JWT头部信息header加密得到B由JWT用到的身份验证信息json数据加密得到C由A和B加密得到,是校 ...
- 读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)
在做对ReprotViewer编程时,想做一个用户可以更改显示/打印列的功能,大致看了下,只需要通过对rdlc文件中改变其<Hidden>节点值为false/true,即可实现对应某列的显 ...
- Java安全管理器
启动SecurityManager开关: 隐式: 启动时添加JVM启动参数: -Djava.security.manager :启动默认的安全管理器: -Djava.security.policy=& ...