国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

django處理分頁

這篇具有很好參考價值的文章主要介紹了django處理分頁。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

當(dāng)數(shù)據(jù)庫量比較大的時候一定要分頁查詢的
在django中操作數(shù)據(jù)庫進(jìn)行分頁

queryset = models.PrettyNum.objects.all()   #查詢所有
queryset = models.PrettyNum.objects.all()[0:10]    #查詢出1-10列
queryset = models.PrettyNum.objects.filter(mobile__contains='136')[0:10]  #查詢出符合條件的前10列

queryset = models.PrettyNum.objects.all().count()   #查詢有多少條數(shù)據(jù),返回的是一個數(shù)字

#第一頁
queryset = models.PrettyNum.objects.all()[0:10]

#第二頁
queryset = models.PrettyNum.objects.all()[10:20]

#第三頁
queryset = models.PrettyNum.objects.all()[20:30]

1、封裝分頁的插件類

這個分頁插件要實(shí)現(xiàn)的是如下效果,當(dāng)前頁和前5頁,后5頁,上一頁和下一頁,還有首頁和尾頁
django處理分頁,python,django,python,后端
在app01下創(chuàng)建一個分頁的的工具類,pagination.py
django處理分頁,python,django,python,后端
pagination.py的內(nèi)容:
在初始化函數(shù)中,需要的參數(shù)有

request:請求的對象,通過對象獲取url傳的參數(shù)
queryset:符合條件的數(shù)據(jù)(根據(jù)這個數(shù)據(jù)庫給他鏡像分頁處理)
page_size: 每頁顯示多少條數(shù)據(jù), 不傳默認(rèn)顯示10條數(shù)據(jù)庫
page_param:在URL中傳遞的獲取分頁的參數(shù),例如 /pretty/list/?page=12, 默認(rèn)是page
plus: 顯示當(dāng)前頁的前或后幾頁(頁碼),默認(rèn)是5
在初始化函數(shù)中計(jì)算出總頁數(shù)

在函數(shù)html就是生成html頁面,最后返回這個頁碼html頁面的字符串

from django.utils.safestring import mark_safe
class Pagination():
    def __init__(self,request,queryset,page_size=10,page_param="page",plus=5):
        """
        :param request: 請求的對象
        :param queryset: 符合條件的數(shù)據(jù)(根據(jù)這個數(shù)據(jù)庫給他鏡像分頁處理)
        :param page_size: 每頁顯示多少條數(shù)據(jù)
        :param page_param: 在URL中傳遞的獲取分頁的參數(shù),例如 /pretty/list/?page=12
        :param plus: 顯示當(dāng)前頁的前或后幾頁(頁碼)
        """
        page = request.GET.get(page_param,"1")
        if page.isdecimal():
            page = int(page)
        else:
            page = 1

        self.page = page
        self.page_size = page_size
        self.start = (page-1)* page_size
        self.end = page * page_size

        self.page_queryset = queryset[self.start:self.end]
        total_count = queryset.count()
        total_page_count,div = divmod(total_count,page_size)
        if div:
            total_page_count += 1
        self.total_page_count = total_page_count
        self.plus = plus

    def html(self):
        #計(jì)算出,顯示當(dāng)前頁的前5頁,后5頁
        if self.total_page_count <= 2 * self.plus + 1:
            #數(shù)據(jù)庫中的數(shù)據(jù)比較少,沒有11頁
            start_page = 1
            end_page = self.total_page_count
        else:
            # 數(shù)據(jù)庫中的數(shù)據(jù)比較多,大于11頁
            # 當(dāng)前頁<5時,(小級值)
            if self.page <= self.plus:
                start_page = 1
                end_page = 2 * self.plus + 1
            else:
                # 當(dāng)前頁大于5
                #當(dāng)前頁 + 5 > 總頁面
                if (self.page + self.plus) > self.total_page_count:
                    start_page = self.total_page_count - 2*self.plus
                    end_page = self.total_page_count
                else:
                    start_page = self.page - self.plus
                    end_page = self.page + self.plus
        # 頁碼
        page_str_list = []
        page_str_list.append('<li><a href="?page={}">首頁</a></li>'.format(1))

        # 上一頁
        if self.page > 1:
            prev = '<li><a href="?page={}">上一頁</a></li>'.format(self.page -1)
        else:
            prev = '<li><a href="?page={}">上一頁</a></li>'.format(1)
        page_str_list.append(prev)

        #頁面
        for i in range(start_page,end_page + 1):
            if i == self.page:
                ele = '<li class="active"><a href="?page={}">{}</a></li>'.format(i,i)
            else:
                ele = '<li><a href="?page={}">{}</a></li>'.format(i, i)
            page_str_list.append(ele)
        # 下一頁
        if self.page < self.total_page_count:
            prev = '<li><a href="?page={}">下一頁</a></li>'.format(self.page + 1)
        else:
            prev = '<li><a href="?page={}">下一頁</a></li>'.format(self.total_page_count)
        page_str_list.append(prev)

        # 尾頁
        page_str_list.append('<li><a href="?page={}">尾頁</a></li>'.format(self.total_page_count))

        search_string = """
          <li>
          <form style="float:left; margin-left: -1px" method="get">
              <input name="page" style="position: relative;float: left;display: inline-block;width: 80px;border-radius: 0" type="text" class="form-control" placeholder="頁碼">
              <button style="border-radius: 0" class="btn btn-default" type="submit">跳轉(zhuǎn)</button>
          </form>
    </li>
        
        """
        page_str_list.append(search_string)
        page_string = mark_safe("".join(page_str_list))
        return page_string

2、在視圖函數(shù)中使用頁碼類

在views.py 中導(dǎo)入類,實(shí)例化類,通過context 把內(nèi)容傳給頁面

from django.shortcuts import render,redirect,HttpResponse
from django import forms
from app01 import models
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError
from app01.utils.pagination import Pagination


def pretty_list(request):
    """靚號列表"""

    data_dict = {}
    search_data = request.GET.get('q',"")
    if search_data:
        data_dict['mobile__contains'] = search_data
    #從數(shù)據(jù)庫查詢到數(shù)據(jù),排序,使用order_by ,-level表示降序,level升序
    queryset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")
    page_obj = Pagination(request,queryset)
    context={
          "search_data": search_data,
        "queryset": page_obj.page_queryset,  #分頁的數(shù)據(jù)
        "page_string":page_obj.html()    #頁碼
    }
    return render(request,'pretty_list.html',context)

3、在html中展示頁碼

在pretty_list.html的底部加上顯示頁面的
不管在哪個頁面需要使用頁碼,只需要在要展示的地方加上下面的頁碼展示的就可以了,具體有多少頁,根據(jù)數(shù)據(jù)條數(shù),自動生成在page_string 變量中

  <nav aria-label="Page navigation">
            <ul class="pagination">
                     {{ page_string }}
            </ul>
 </nav>

pretty_list.html的整體代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-632737.html

{% extends 'layout.html' %}

{% block content %}
    <div class="container">
        <div style="margin-bottom: 10px">
            <a class="btn btn-success" href="/pretty/add/">新建靚號</a>
            <div style="float: right; width: 300px">
                <form method="get">
                    <div class="input-group">

                        <input type="text" name="q" class="form-control" placeholder="手機(jī)號搜索" value="{{ search_data }}">
                        <span class="input-group-btn">
                                <button class="btn btn-default" type="submit">
                                    <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
                                </button>
                          </span>

                    </div>
                </form>
            </div>
        </div>
        <div class="panel panel-default">
            <div class="panel-heading"><span class="glyphicon glyphicon-list" aria-hidden="true"></span> 靚號列表</div>
            <table class="table table-bordered">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>號碼</th>
                    <th>價格</th>
                    <th>級別</th>
                    <th>狀態(tài)</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for obj in queryset %}
                    <tr>
                        <td>{{ obj.id }}</td>
                        <td>{{ obj.mobile }}</td>
                        <td>{{ obj.price }}</td>
                        <td>{{ obj.get_level_display }}</td>
                        <td>{{ obj.get_status_display }}</td>
                        <td>
                            <a class="btn btn-primary btn-xs" href="/pretty/{{ obj.id }}/edit/">編輯</a>
                            <a class="btn btn-danger btn-xs" href="/pretty/{{ obj.id }}/delete/">刪除</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>

        <nav aria-label="Page navigation">
            <ul class="pagination">
                     {{ page_string }}
            </ul>
        </nav>
    </div>

{% endblock %}

到了這里,關(guān)于django處理分頁的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python智能家居系統(tǒng)后端源碼,基于Django+MQTT+ESP8266的智能家居系統(tǒng)源碼

    代碼下載地址:Python智能家居系統(tǒng)后端源碼 服務(wù)器硬件環(huán)境: 處理器:Intel? Xeon? CPU E5-2680 v4 @ 2.40GHz 1核 內(nèi)存:2GB 硬盤空間:60GB 單片機(jī)環(huán)境: 單片機(jī):ESP8266-12E NodeMCU 開發(fā)環(huán)境:Arduino IDE(1.8.19) 軟件環(huán)境: 操作系統(tǒng):Ubuntu 18.04 LTS 編程語言:Python(3.7.9) Web后端框架:

    2024年02月02日
    瀏覽(43)
  • 前端分頁和后端分頁

    分頁可以在前端或后端進(jìn)行,具體取決于項(xiàng)目的需求和實(shí)現(xiàn)方式。以下是前端分頁和后端分頁的一些特點(diǎn)和適用場景: 前端分頁 : 特點(diǎn) :前端分頁是指在前端(瀏覽器端)對數(shù)據(jù)進(jìn)行分頁處理,即一次性獲取所有數(shù)據(jù),然后在前端進(jìn)行分頁展示和切換。 優(yōu)點(diǎn) :減輕了服務(wù)

    2024年04月10日
    瀏覽(27)
  • java通用分頁(后端)

    java通用分頁(后端)

    目錄 1.通用分頁是什么? 2.通用分頁的作用 3.?通用分頁的優(yōu)缺點(diǎn) ?4.通用分頁的核心思想 5.通用分頁實(shí)例 書籍實(shí)體類: 封裝pageBean類: 書籍“分頁模糊查詢所有”方法 ?封裝baseDao通用分頁模糊查詢的方法 6.單元測試框架JUnit4 ?eclipse中使用JUnit4 為什么是JUnit4不是JUnit5? Java通

    2024年02月09日
    瀏覽(25)
  • Java設(shè)置后端分頁

    getPages(Integer.parseInt(String.valueOf(page.getCurrent())),Integer.parseInt(String.valueOf(page.getSize())),dtos); /** * 對list分頁 * @param currentPage * @param pageSize * @param list * @return */ private IPage getPages(Integer currentPage, Integer pageSize, List list) { IPage page = new Page(); if(list == null){ return null; } int size = list.size();

    2024年02月06日
    瀏覽(18)
  • django--分頁功能

    Django 提供了強(qiáng)大的分頁功能,可以輕松地在視圖中實(shí)現(xiàn)分頁。 在視圖中使用分頁: 在模板中顯示分頁: 這個模板中的分頁導(dǎo)航演示了如何在模板中顯示分頁鏈接。它使用 data 對象中的信息,如 has_previous、previous_page_number、number、num_pages 等來生成分頁導(dǎo)航鏈接。

    2024年02月04日
    瀏覽(20)
  • django進(jìn)階-分頁

    定義: ? ? ? ? Django 提供Paginator類可以方便的實(shí)現(xiàn)分頁功能 ????????Paginator類位于django.core.paginator ????????對象的構(gòu)造方法 ? ? ? ? paginator = Paginator(object_list,per_page) ? ? ? ? 參數(shù) ????????????????object_list? ? ? ? 需要分頁的對象 ????????????????p

    2024年02月14日
    瀏覽(23)
  • Django_Paginator分頁器

    Django_Paginator分頁器

    目錄 分頁器代碼說明 簡單demo 源碼等資料獲取方法 執(zhí)行結(jié)果如下: 定義視圖 添加路由 添加demo.html模板 界面第5頁展示如下: ? 各位想獲取源碼的朋友請點(diǎn)贊 + 評論 + 收藏 ,三連! 三連 之后我會在評論區(qū)挨個私信發(fā)給你們~

    2024年02月15日
    瀏覽(21)
  • Python web實(shí)戰(zhàn)之Django的文件上傳和處理詳解

    Python web實(shí)戰(zhàn)之Django的文件上傳和處理詳解

    ? :Python Web開發(fā)、Django、文件上傳、文件處理 今天分享一下Django的文件上傳和處理。 在開始深入講解Django的文件上傳和處理之前,先了解一下文件上傳的基本原理。當(dāng)用戶選擇要上傳的文件后,該文件會被發(fā)送到服務(wù)器端,并存儲在服務(wù)器的某個位置上。我們需要在

    2024年02月13日
    瀏覽(88)
  • 教你實(shí)現(xiàn)SSM和Ajax后端分頁

    教你實(shí)現(xiàn)SSM和Ajax后端分頁

    一,SSM中分頁的使用 在java中分頁一直是我不敢觸及的一部分。本次博客全面剖析一下SSM框架如何實(shí)現(xiàn)分頁。 二,效果展示 點(diǎn)擊前一頁后一頁首頁或者尾頁或者是跳轉(zhuǎn)都是靜態(tài)的實(shí)現(xiàn)。 三,表單的實(shí)現(xiàn) 3.1,前端代碼 listByajax.jsp 3.2,Ajax的實(shí)現(xiàn) 3.3,配置好page(用于顯示條數(shù),

    2024年02月15日
    瀏覽(24)
  • JAVA---后端開發(fā)中實(shí)現(xiàn)分頁功能

    JAVA---后端開發(fā)中實(shí)現(xiàn)分頁功能

    Java開發(fā)是一門廣泛應(yīng)用于各種軟件系統(tǒng)和網(wǎng)絡(luò)應(yīng)用的重要技術(shù)。在實(shí)際開發(fā)中,經(jīng)常需要處理大量的數(shù)據(jù)和結(jié)果集,而分頁功能則成為了提高用戶體驗(yàn)和系統(tǒng)性能的關(guān)鍵。分頁是將大數(shù)據(jù)集按照固定大小劃分成多頁并逐頁顯示的過程,能夠有效減少數(shù)據(jù)傳輸量和頁面加載時間

    2024年02月07日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包