django之快速分页
本文介紹djanog兩種分頁,第一是普通分頁,第二是使用haystack全文檢索的分頁。
1.django自帶分頁功能,這個功能非常好用。
基本知識點:
Django提供了數據分頁的類,這些類被定義在django/core/paginator.py中
對象Paginator用于對列進行一頁n條數據的分頁運算
對象Page用于表示第m頁的數據
Paginator對象
方法init(列表,int):返回分頁對象,參數為列表數據,每面數據的條數
屬性count:返回對象總數
屬性num_pages:返回頁面總數
屬性page_range:返回頁碼列表,從1開始,例如[1, 2, 3, 4]
方法page(m):返回Page對象,表示第m頁的數據,下標以1開始
Page對象
調用Paginator對象的page()方法返回Page對象,不需要手動構造
屬性object_list:返回當前頁對象的列表
屬性number:返回當前是第幾頁,從1開始
屬性paginator:當前頁對應的Paginator對象
方法has_next():如果有下一頁返回True
方法has_previous():如果有上一頁返回True
方法len():返回當前頁面對象的個數
迭代頁面對象:訪問當前頁面中的每個對象
使用示例:?普通頁面中使用
views.py文件中創建視圖page_test
視圖代碼:
導入模塊
from django.core.paginator import Paginator
from .models import *
def index(request):
index= int(request.GET.get('index','1'))
blog = Post.objects.filter(published_date__isnull=False).order_by('-published_date')
page = Paginator(blog,1)?#對搜索出來的結果進行分頁,一頁顯示一條
blog = page.page(index)?#獲取第index?頁的數據,這個需要前端用戶點擊時傳過來
context = {"blog":blog}
return render(request,'blog/index.html',context)
模板分頁代碼:
備注:
has_previous 判斷是否有上一頁
previous_page_number?獲取上一頁的頁碼
paginator.page_range?獲取頁碼列表如:[1,2,3,4,5]
has_next 判斷是否還有下一頁
next_page_number?獲取下一頁頁碼
paginator.num_pages?獲取總頁數
?
<div class="pagenation">
{% if blog.has_previous %}
<a href="/?index={{ blog.previous_page_number }}" class="active">上一頁</a>
{% else %}
<a href="/?index=1" class="active">上一頁</a>
{% endif %}
{% for pindex in blog.paginator.page_range %}
<a href="?index={{ pindex }}" class="active">{{ pindex }}</a>
{% endfor %}
{% if blog.has_next %}
<a href="/?index={{ blog.next_page_number }}" class="active">下一頁</a>
{% else %}
<a href="/?index={{ blog.paginator.num_pages }}" class="active">下一頁</a>
{% endif %}
</div>
全文檢索中的分頁:
django 和haystack?版本:
Django (1.8.7)
django-haystack (2.6.1)
注意:這里指的是已經實現全文檢索功能后的分頁操作:
在項目目錄中配置:?這個配置指的是搜索頁一頁多少條數據
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 10
?
seach.html?里的配置
備注:
query ??搜索關鍵字,自動傳到模板
page_obj 分頁后的數據,haystack?自動傳到模板
其他方法跟上面的普通頁面分頁一樣使用。
?
<div class="pagenation">
{% if page_obj.has_previous %}
<a href="/search/?q={{ query }}&page={{ page_obj.previous_page_number }}" >上一頁</a>
{% else %}
<a href="/search/?q={{ query }}&page=1" >上一頁</a>
{% endif %}
{% for pindex in page_obj.paginator.page_range %}
{% if pindex == page.number %}
<a href="#" class="active">{{ pindex }}</a>
{% else %}
<a href="/search/?q={{ query }}&page={{ pindex }}">{{ pindex }}</a>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<a href="/search/?q={{ query }}&page={{ page_obj.next_page_number }}" >下一頁</a>
{% else %}
<a href="/search/?q={{ query }}&page={{ page_obj.paginator.num_pages }}" >下一頁</a>
{% endif %}
</div>
?
轉載于:https://www.cnblogs.com/huangguifeng/p/7614622.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的django之快速分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ccxprocess可以禁用么_提效 |
- 下一篇: 解决Yii2邮件发送问题(结果返回成功,