1. 程式人生 > >Django分頁(一)

Django分頁(一)

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>
        {
% endfor %} {{ prev_page }}<a href="/index?p={{ prev_page }}">上一頁</a> {{ next_page }}<a href="/index?p={{ next_page }}">下一頁</a> </div> </div> </body> </html>
View Code

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分頁(一)