Django分頁(一)
阿新 • • 發佈:2019-03-01
create return res iou span end 開始 引入 class
Django分頁(一)
手動實現簡單分頁
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div class="header"> <div> {% for user in user_list %} <li>{{ user.name }} {{ user.age }} </li> {View Code% endfor %} {{ prev_page }}<a href="/index?p={{ prev_page }}">上一頁</a> {{ next_page }}<a href="/index?p={{ next_page }}">下一頁</a> </div> </div> </body> </html>
Views代碼
from django.shortcuts import render,HttpResponse,redirect from blog.models import * from django.views import View # Create your views here. USER_LIST=[] for i in range(888): temp={‘name‘:‘root‘+str(i),‘age‘:i} USER_LIST.append(temp) per_page_count = 10 # 定義每頁要顯示多少行數據 def get_index(request): current_page=request.GET.get(‘p‘)#獲取客戶端傳過來的參數,得到翻到哪一頁 current_page = int(current_page) # 字符--〉數字 start = (current_page - 1) * per_page_count # 定義從哪一行開始 end = current_page * per_page_count # 定義數據在哪一行結束 data = USER_LIST[start:end] # 對數據進行切片 # p=1 # 0,10 0-9 # p=2 # 10,20 10-19#上一頁 prev_page=current_page-1 #下一頁 next_page=current_page+1 return render(request,"index.html",{‘user_list‘:data,‘prev_page‘:prev_page,‘next_page‘:next_page})
Django分頁簡單使用
在html文件下創建include目錄,然後把分頁功能代碼放入其中
使用include引入功能html文件
功能html文件如下:
{% if posts.has_previous %} <a href="?p={{ posts.previous_page_number }}">Previous</a> {% endif %} <span class="current"> Page {{ posts.number }} of {{ posts.paginator.num_pages }}. </span> {% if posts.has_next %} <a href="?p={{ posts.next_page_number }}">Next</a> {% endif %}
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div class="header"> <div> <ul> {% for user in posts.object_list %} <li>{{ user.name }} {{ user.age }} </li> {% endfor %} </ul> {% if posts.has_previous %} <a href="?p={{ posts.previous_page_number }}">Previous</a> {% endif %} <span class="current"> Page {{ posts.number }} of {{ posts.paginator.num_pages }}. </span> {% if posts.has_next %} <a href="?p={{ posts.next_page_number }}">Next</a> {% endif %} <!--{% include ‘include/page1.html‘ %}--> </div> </div> </body> </html>View Code
View代碼
from django.shortcuts import render,HttpResponse,redirect from blog.models import * from django.views import View # Create your views here. USER_LIST=[] for i in range(888): temp={‘name‘:‘root‘+str(i),‘age‘:i} USER_LIST.append(temp) per_page_count = 10 # 定義每頁要顯示多少行數據 from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger def get_index1(request): #django分頁主要有兩個對象:paginator與page對象 #如果這裏是表的話models.表名.objects.all()來操作 #將表裏所有的內容都放進去,每頁顯示10條記錄 paginator=Paginator(USER_LIST,10) #實例化Paginator #全部數據:USER_LIST #per_page:每頁顯示條目數量 #count:數據據總個數 #num_pages:總頁數 #page_range:總頁數的索引範圍 #page:page對象(是否有上一頁,是否有下一頁) current_page=request.GET.get(‘p‘) current_page = int(current_page) # 字符--〉數字 print(current_page) try: posts = paginator.page(current_page) # has_next 是否有下一頁 # next_page_number 下一頁頁碼 # has_previous 是否有上一頁 # previous_page_number 上一頁頁碼 # object_list 分頁之後的數據列表 # number 當前頁 # paginator paginator對象 # print(posts.object_list) except PageNotAnInteger:#如果輸入內容不為整數,傳入頁面1 posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) return render(request, ‘index1.html‘, {‘posts‘: posts})
Django分頁自定義使用
功能html
{% if posts.has_previous %} <a href="?p={{ posts.previous_page_number }}">Previous</a> {% endif %} {% for i in posts.paginator.page_num_range %} <a href="?p={{ i }}">{{ i }}</a> {% endfor %} {% if posts.has_next %} <a href="?p={{ posts.next_page_number }}">Next</a> {% endif %}
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div class="header"> <div> <ul> {% for user in posts.object_list %} <li>{{ user.name }} {{ user.age }} </li> {% endfor %} </ul> {% include ‘include/page1.html‘ %} </div> </div> </body> </html>
View代碼
class CustomPaginator(Paginator): def __init__(self, current_page, max_pager_num, *args, **kwargs): """ :param current_page: 當前頁 :param max_pager_num:最多顯示的頁碼個數 :param args: :param kwargs: :return: """ self.current_page = int(current_page) self.max_pager_num = max_pager_num super(CustomPaginator, self).__init__(*args, **kwargs) def page_num_range(self): # 當前頁面 # self.current_page # 總頁數 # self.num_pages # 最多顯示的頁碼個數 # self.max_pager_num print(1) if self.num_pages < self.max_pager_num: return range(1, self.num_pages + 1) print(2) part = int(self.max_pager_num / 2) if self.current_page - part < 1: return range(1, self.max_pager_num + 1) print(3) if self.current_page + part > self.num_pages: return range(self.num_pages + 1 - self.max_pager_num, self.num_pages + 1) print(4) return range(self.current_page - part, self.current_page + part + 1) def get_index2(request): current_page = request.GET.get(‘p‘) current_page=int(current_page) paginator = CustomPaginator(current_page, 11, USER_LIST, 10) # per_page: 每頁顯示條目數量 # count: 數據總個數 # num_pages:總頁數 # page_range:總頁數的索引範圍,如: (1,10),(1,200) # page: page對象 try: posts = paginator.page(current_page) # has_next 是否有下一頁 # next_page_number 下一頁頁碼 # has_previous 是否有上一頁 # previous_page_number 上一頁頁碼 # object_list 分頁之後的數據列表 # number 當前頁 # paginator paginator對象 print(posts.object_list) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) return render(request, ‘index2.html‘, {‘posts‘: posts})
Django分頁(一)