使用django内置的分页器来实现分页效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>分页2的练习</title>
</head>
<body>
<h3>分页2的练习</h3>
<p>当前页面中的内容</p>
<ul>
{% for item in obj_page %}
<li>{{ item.hname }}--{{ item.hbook.b_title }}</li>
{% endfor %}
</ul>
<p>下面分页的显示</p>
{% if obj_page.has_previous %}
<a href="{% url 'app05:in' obj_page.previous_page_number %}">上一页</a>
{% else %}
上一页
{% endif %}
{% for current_page in all_pages %}
{% if p_index == current_page %}
{{ p_index }}
{% else %}
<a href="{% url 'app05:in' current_page %}">{{ current_page }}</a>
{% endif %}
{% endfor %}
{% if obj_page.has_next %}
<a href="{% url 'app05:in' obj_page.next_page_number %}">下一页</a>
{% else %}
下一页
{% endif %}
</body>
</html>
后台逻辑的返回
class Index2(View):
def get(self, request, index):
list_hero = HeroInfo.objects.all()
obj_page, p_index, all_pages = self.get_page(list_hero, index)
print("当前的压面", p_index)
return render(request, 'app05/分页2.html', locals())
def get_page(self, list_hero, index):
p = Paginator(list_hero, 2)
if index == "":
index = "1"
index = int(index)
obj_page = p.page(index)
all_pages = p.page_range
return obj_page, index, all_pages
利用django自带分页组件实现分页功能
使用分页器Paginator:
在视图中使用 Paginator来为查询集分页。我们提供视图以及相关的模板来展示如何展示这些结果。
Paginator常用属性
per_page: 每页显示条目数量
count: 数据总个数
num_pages:总页数
page_range:总页数的索引范围,页码的范围,从1开始,例如[1, 2, 3, 4]。
Paginator所需参数:
object_list 一个列表,元祖或则Django 的Queryset 对象 或则其他对象带有 count() or __len__()的方法
per_page :就是1页显示几条数据
Paginator对象的方法:
page(number) :返回在提供的下标处的Page对象,下标以1开始。
使用page对象方法:
Page.has_next()
如果有下一页,则返回True。
Page.has_previous()
如果有上一页,返回 True。
Page.has_other_pages()
如果有上一页或下一页,返回True。
Page.next_page_number()
返回下一页的页码。如果下一页不存在,抛出InvalidPage异常。
Page.previous_page_number()
返回上一页的页码。如果上一页不存在,抛出InvalidPage异常。
Page.start_index()
返回当前页上的第一个对象,相对于分页列表的所有对象的序号,从1开始。比如,将五个对象的列表分为每页两个对象,第二页的start_index()会返回3。
Page.end_index()
返回当前页上的最后一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,将五个对象的列表分为每页两个对象,第二页的end_index() 会返回 会返回 4。
Page.object_list
当前页上所有对象的列表。
Page.number
当前页的序号,从1开始。
Page.paginator
相关的Paginator对象。