说明:
分页
Django 提供了一些类实现管理数据分页,这些类位于 django/core/paginator.py 中
Paginator 对象
Paginator(列表,int) :返回分页对象,参数为列表数据,每面数据的条数
属性
count :对象总数
num_pages :页面总数
page_range :页码列表,从 1 开始,例如 [1, 2, 3, 4]
方法
page(num) :下标以 1 开始,如果提供的页码不存在,抛出 InvalidPage 异常
异常 exception
InvalidPage :当向 page()传入一个无效的页码时抛出
PageNotAnInteger :当向 page()传入一个不是整数的值时抛出
EmptyPage :当向 page()提供一个有效值,但是那个页面上没有任何对象时抛出
Page 对象
创建对象
Paginator 对象的 page()方法返回 Page 对象,不需要手动构造
属性
object_list :当前页上所有对象的列表
number :当前页的序号,从 1 开始
paginator :当前 page 对象相关的 Paginator 对象
方法
has_next() :如果有下一页返回 True
has_previous() :如果有上一页返回 True
has_other_pages() :如果有上一页或下一页返回 True
next_page_number() :返回下一页的页码,如果下一页不存在,抛出 InvalidPage 异常
previous_page_number() :返回上一页的页码,如果上一页不存在,抛出 InvalidPage异常
len() :返回当前页面对象的个数
迭代页面对象:访问当前页面中的每个对象
示例
1:创建分页视图
def logined_index(request, pindex):
# return HttpResponse("index")
articlelist = Article.objects.all()
p = Paginator(articlelist, 2) # 按照每页两条进行分页
if pindex == "":
pindex = 1
pindex = int(pindex)
# 构造page对象
page = p.page(pindex)
# 得到页码列表
plist = p.page_range
username = request.session.get("username")
user = User.objects.get(pk=13)
# print(user.header.url)
# return render(request, 'pianke/logined_index.html', {'portrait': user.portrait})
context = {
"username": username,
"articlelist": page,
"portrait": user.portrait,
# "article": page,
"plist": plist,
"request": request,
"pIndex": pindex,
}
return render(request, "pianke/logined_index.html", context)
2:配置url
略
3:分页展示
<div class="article">
{% for item in articlelist %}
<div class="detail-intro">
<div class="detail-title">
<a href="{% url 'pianke:article_detail'%}">{{item.title}}</a>
</div>
<div class="article-author"><a href="../../pages/user/user.html?uid=1176989" >
By / {{item.author.username}}</a></div>
<hr style="color: #0f0f0f; width: 100px; margin-left: 20px; margin-top: 20px">
<div class="detail-article-intro">
{{item.content|truncatechars_html:100 }}
</div>
<div class="article-others">{{item.visit_num}} k次阅读 | 评论:{{item.likes}}
| 喜欢:{{item.likes}} </div>
</div>
{% endfor %}
{% for pindex in plist %}
{% if pIndex == pindex %}
{{ pindex }}
{% else %}
<a href="/pianke/logined_index/{{ pindex }}/">{{ pindex }}</a>
{% endif %}
{% endfor %}
</div>
</div>