說明:
分頁
? Django 提供了一些類實現(xiàn)管理數(shù)據(jù)分頁,這些類位于 django/core/paginator.py 中
Paginator 對象
? Paginator(列表,int) :返回分頁對象,參數(shù)為列表數(shù)據(jù),每面數(shù)據(jù)的條數(shù)
屬性
? count :對象總數(shù)
? num_pages :頁面總數(shù)
page_range :頁碼列表,從 1 開始,例如 [1, 2, 3, 4]
方法
? page(num) :下標(biāo)以 1 開始,如果提供的頁碼不存在,拋出 InvalidPage 異常
異常 exception
? InvalidPage :當(dāng)向 page()傳入一個無效的頁碼時拋出
? PageNotAnInteger :當(dāng)向 page()傳入一個不是整數(shù)的值時拋出
? EmptyPage :當(dāng)向 page()提供一個有效值,但是那個頁面上沒有任何對象時拋出
Page 對象
創(chuàng)建對象
? Paginator 對象的 page()方法返回 Page 對象,不需要手動構(gòu)造
屬性
? object_list :當(dāng)前頁上所有對象的列表
? number :當(dāng)前頁的序號,從 1 開始
? paginator :當(dāng)前 page 對象相關(guān)的 Paginator 對象
方法
has_next() :如果有下一頁返回 True
? has_previous() :如果有上一頁返回 True
has_other_pages() :如果有上一頁或下一頁返回 True
? next_page_number() :返回下一頁的頁碼,如果下一頁不存在,拋出 InvalidPage 異常
? previous_page_number() :返回上一頁的頁碼,如果上一頁不存在,拋出 InvalidPage異常
? len() :返回當(dāng)前頁面對象的個數(shù)
? 迭代頁面對象:訪問當(dāng)前頁面中的每個對象
示例
1:創(chuàng)建分頁視圖
def logined_index(request, pindex):
# return HttpResponse("index")
articlelist = Article.objects.all()
p = Paginator(articlelist, 2) # 按照每頁兩條進(jìn)行分頁
if pindex == "":
pindex = 1
pindex = int(pindex)
# 構(gòu)造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>