python---django中自帶分頁類使用
阿新 • • 發佈:2018-11-01
1.基礎使用:
後臺資料獲取:
from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage#錯誤判斷 List_info = [] for i in range(1000): List_info.append("news%d"%i) def get_page(req): current_page = req.GET.get('p') paginator = Paginator(List_info,10) #傳入總資料和每頁顯示的資料 #含有屬性: #per_page:每頁顯示條數上面的10 #count資料總數 #num_pages:總頁數 #page_range:總頁數索引範圍 #page:page物件 try: posts = paginator.page(current_page) #page物件含有方法: #has_next:判斷是否有下一頁 #has_previous:判斷是否有上一頁 #next_page_number:下一頁頁碼 #previous_page_number:上一頁頁碼 #number:當前頁 注意:這個是屬性,其他是方法,需要加上() #paginator:paginator物件 except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) #num_pages數總頁數,最後一頁 return render(req,'get_page.html',{'posts':posts})
前端程式碼:
<div class="content"> {% for item in posts %} <p>{{ item }}</p> {% endfor %} </div> <div> <span> {% if posts.has_previous %} #模板中呼叫函式不要() <a href="/page.html?p={{ posts.previous_page_number }}">prev</a> {% endif %} <span class="current"> Page {{ posts.number }} of {{ posts.paginator.num_pages }} </span> {% if posts.has_next %} <a href="/page.html?p={{ posts.next_page_number }}">next</a> {% endif %} </span> </div>
2.擴充套件內建分頁:
from django.core.paginator import Paginator class CustomPagimator(Paginator): def __init__(self,current_page,max_page_num,*args,**kwargs): self.current_page = int(current_page) #當前頁 #自定義變數 self.max_page_num = max_page_num #可以顯示多少頁 #自定義變數 super(CustomPagimator,self).__init__(*args,**kwargs) def page_num_range(self): # self.num_pages 總頁數 part_num = int(self.max_page_num/2) if self.num_pages <= self.max_page_num: #先判斷總頁數和執行顯示的頁數大小 return range(1, self.num_pages + 1) if self.current_page <= part_num: #再取半分析 return range(1,self.max_page_num+1) elif self.current_page+part_num>= self.num_pages: return range(self.num_pages-self.max_page_num,self.num_pages+1) else: return range(self.current_page - part_num, self.current_page + part_num + 1)
類呼叫:
List_info = []
for i in range(1000):
List_info.append("news%d"%i)
from 模組.自定義分頁類檔案 import 自定義分頁類CustomPagimator
def get_page(req):
current_page = req.GET.get('p')
paginator = CustomPagimator(current_page=current_page, max_page_num=5,object_list=List_info,per_page=10) #傳入總資料和每頁顯示的資料
try:
posts = paginator.page(current_page)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages) #num_pages數總頁數,最後一頁
page_html = paginator.page_num_range()
return render(req,'get_page.html',{'posts':posts,"page_html":page_html})
前端使用:
<div>
<span>
{% if posts.has_previous %}
<a href="/page.html?p={{ posts.previous_page_number }}">prev</a>
{% endif %}
<span class="page">
{% for i in page_html %}
<a href="/page.html?p={{ i }}">{{ i }}</a>
{% endfor %}
</span>
<span class="current">
Page {{ posts.number }} of {{ posts.paginator.num_pages }}
</span>
{% if posts.has_next %}
<a href="/page.html?p={{ posts.next_page_number }}">next</a>
{% endif %}
</span>
</div>
轉載自山上有風景
轉自山上有風景的文章,總結的很到位,所以我收藏了,很感謝他。