<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] >[success] # 自定義 分頁 分頁分為兩種,一種自定義,一種用自帶的 >[info] ## 自定義的分頁 >[danger] ##### 思路 ~~~ 1.當前頁,當前頁可能會被傳入特別的值建議異常就是第一頁 2.底欄展示頁碼 3.數據總個數用來計算生成多少頁 4.每頁展示頁數 ~~~ * 首先我們利用切片,把數據分成段落顯示,每一頁的第一條數據是(當前頁-1)*頁面顯示條數 ~~~ @property def start(self): ''' :return: 開始頁數 ''' return (self.current_page-1)*self.page_count ~~~ * 每頁最后一條數據是(當前頁*顯示條數) ~~~ @property def end(self): ''' :return: 結束頁數 ''' return (self.current_page*self.page_count) ~~~ * 頁面的總頁數是總條數/頁面顯示頁數 ~~~ @property def total_count(self): ''' :return: 總頁數 ''' v, y = divmod(self.data_count,self.page_count) if y: v +=1 return v ~~~ * 頁面展示的條數也就是循環次數 ~~~ 1.當總頁數小于頁面實際展示頁數時,開始頁1,結束頁實際頁數 2.當總頁數大于頁面實際展示頁數時 3.第一種情況當前頁小于中間頁,開始頁1,結束頁是頁面展示底欄 4.第二種情況當前頁大于中間頁,開始頁當前頁-(中間頁-1)/2,結束頁(當前頁+1)/2 5.當然第二種的前提建立在(當前頁+(中間頁-1)/2)大于總頁數 6.開始頁總頁數-底欄數-1,結束頁等于總頁數+1 ~~~ >[danger] ##### 代碼 | 參數 |意義| | --- | --- | | current_page | 當前頁 | | data_count | 數據庫總條數 | | per_page_count | 每頁顯示條數 | | pager_num | 顯示幾個頁碼欄 | |base_url|當前連接| ~~~ from django.utils.safestring import mark_safe class Pagination(object): def __init__(self, current_page, data_count, per_page_count=1, pager_num=7): try: self.current_page = int(current_page) except Exception as e: self.current_page = 1 self.data_count = data_count self.per_page_count = per_page_count self.pager_num = pager_num @property def start(self): return (self.current_page - 1) * self.per_page_count @property def end(self): return self.current_page * self.per_page_count @property def total_count(self): v, y = divmod(self.data_count, self.per_page_count) if y: v += 1 return v def page_str(self, base_url): page_list = [] if self.total_count < self.pager_num: start_index = 1 end_index = self.total_count + 1 else: if self.current_page <= (self.pager_num + 1) / 2: start_index = 1 end_index = self.pager_num + 1 else: start_index = self.current_page - (self.pager_num - 1) / 2 end_index = self.current_page + (self.pager_num + 1) / 2 if (self.current_page + (self.pager_num - 1) / 2) > self.total_count: end_index = self.total_count + 1 start_index = self.total_count - self.pager_num + 1 if self.current_page == 1: prev = '<li><a class="page" href="javascript:void(0);">上一頁</a></li>' else: prev = '<li><a class="page" href="%s?p=%s">上一頁</a></li>' % (base_url, self.current_page - 1,) page_list.append(prev) for i in range(int(start_index), int(end_index)): if i == self.current_page: temp = '<li class="active"><a class="page active" href="%s?p=%s">%s</a></li>' % (base_url, i, i) else: temp = '<li><a class="page" href="%s?p=%s">%s</a></li>' % (base_url, i, i) page_list.append(temp) if self.current_page >= self.total_count: nex = '<li><a class="page" href="javascript:void(0);">下一頁</a></li>' else: nex = '<li><a class="page" href="%s?p=%s">下一頁</a></li>' % (base_url, self.current_page + 1,) page_list.append(nex) # jump = """ # <input type='text' /><a onclick='jumpTo(this, "%s?p=");'>GO</a> # <script> # function jumpTo(ths,base){ # var val = ths.previousSibling.value; # location.href = base + val; # } # </script> # """ % (base_url,) # # page_list.append(jump) page_str = mark_safe("".join(page_list)) return page_str ~~~ >[success] 用法 ~~~ 1.取出所有條數 2.獲取當前頁碼 3.對數據做切片 4.獲取當前連接 ~~~ ~~~ def index(request): datacount = models.userInfo.objects.count() page_obj = Pagination(request.GET.get('p'),datacount) userinfo = models.userInfo.objects.all()[page_obj.start:page_obj.end] print(page_obj.start,page_obj.end) base_url = reverse('index', ) page_str = page_obj.page_str(base_url) return render(request, "index.html", { 'userinfo': userinfo, 'page_str': page_str, }) ~~~ >[success] # Django 自帶的分頁 >[info] ## 基本參數介紹 >[danger] ##### 引入類 ~~~ from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger ~~~ >[danger] ##### 使用 ~~~ 1.第一個參數必須為list 2.每頁展示個數 paginator = Paginator(list(obj_count), 1) ~~~ * 這里面封裝的方法有 ~~~ 1.per_page: 每頁顯示條目數量 2.count: 數據總個數 3.num_pages:總頁數 4.page_range:總頁數的索引范圍,如: range(1, 6) 頁數循環 5.page: page對象(是否具有上一頁,下一頁) ~~~ * page 對象有 ~~~ 1. has_next 是否有下一頁 2. next_page_number 下一頁頁碼 3. has_previous 是否有上一頁 4. previous_page_number 上一頁頁碼 5. object_list 分頁之后的數據列表 6. number 當前頁 7. paginator paginator對象 ~~~ >[danger] views代碼 ~~~ def index(request): obj_count = models.userInfo.objects.all() paginator = Paginator(list(obj_count), 2) current_page = request.GET.get('page') try: posts = paginator.page(current_page) except EmptyPage: posts = paginator.page(paginator.num_pages) except PageNotAnInteger: posts = paginator.page(1) return render(request, 'index.html', {'posts': posts}) ~~~ >[danger] html ~~~ //是否有上一頁 {% if posts.has_previous %} <a href="/index1?page={{ posts.previous_page_number }}">上一頁</a> //沒有上一頁,不讓點擊 {% else %} <a href="#">上一頁</a> {% endif %} //是否有下一頁 {% if posts.has_next%} <a href="/index1?page={{ posts.next_page_number }}">下一頁</a> //沒有下一頁,不讓點擊 {% else %} <a href="#">下一頁</a> {% endif %} ~~~ * 數據展示 ~~~ <ul> {% for i in posts %} <li>{{ i }}</li> {% endfor %} </ul> ~~~ >[danger] ##### 升級版本自定制 ~~~ #保證循環的次數在規定的展示欄個數,如果設置11,循環的次數保證在11次 class CustomPaginator(Paginator): def __init__(self, current_page, per_pager_num,*args, **kwargs): ''' :param current_page: 當前頁 :param per_pager_num: 底邊欄展示頁數 ''' self.current_page = int(current_page) self.per_pager_num = int(per_pager_num) super(CustomPaginator, self).__init__(*args, **kwargs) def page_num_range(self): #總頁數小于實際展示頁 if self.num_pages < self.per_pager_num: return range(1,self.num_pages+1) #part 當前總展示欄中間點5 part = int(self.per_pager_num//2) #最小頁數為1防止出現負數情況 if self.current_page <= part: return range(1,self.per_pager_num+1) #最大頁數為實際總頁數 if(self.current_page+part)>self.num_pages: return range(self.num_pages-self.per_pager_num+1,self.num_pages+1) return range(self.current_page-part,self.current_page+part+1) ~~~ ![](https://box.kancloud.cn/6997e2cc9517cd514b32ddedb4ff25b7_691x278.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看