国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Django自定義分頁(yè)效果

2019-11-25 16:03:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

分頁(yè)功能在每個(gè)網(wǎng)站都是必要的,對(duì)于分頁(yè)來(lái)說(shuō),其實(shí)就是根據(jù)用戶(hù)的輸入計(jì)算出應(yīng)該顯示在頁(yè)面上的數(shù)據(jù)在數(shù)據(jù)庫(kù)表中的起始位置。

確定分頁(yè)需求:

1. 每頁(yè)顯示的數(shù)據(jù)條數(shù)
2. 每頁(yè)顯示頁(yè)號(hào)鏈接數(shù)
3. 上一頁(yè)和下一頁(yè)
4. 首頁(yè)和末頁(yè)

效果圖:

首先,利用django內(nèi)置的分頁(yè)功能,寫(xiě)分頁(yè)類(lèi):

from django.core.paginator import Paginator, Page  # 導(dǎo)入django分頁(yè)模塊class PageInfo(object): def __init__(self, current_page, all_count, base_url, per_page=10, show_page=11):  """  :param current_page: 當(dāng)前頁(yè)  :param all_count: 總頁(yè)數(shù)  :param base_url: 模板  :param per_page: 每頁(yè)顯示數(shù)據(jù)條數(shù)  :param show_page: 顯示鏈接頁(yè)個(gè)數(shù)  """  #若url錯(cuò)誤,默認(rèn)顯示第一頁(yè)(錯(cuò)誤類(lèi)型可能為:空頁(yè)面編號(hào),非整數(shù)型頁(yè)面編號(hào))  try:   self.current_page = int(current_page)  except Exception as e:   self.current_page = 1    #根據(jù)數(shù)據(jù)庫(kù)信息條數(shù)得出總頁(yè)數(shù)     a, b = divmod(all_count, per_page)  if b:   a += 1  self.all_page = a     self.base_url = base_url  self.per_page = per_page  self.show_page = show_page #當(dāng)前頁(yè)起始數(shù)據(jù)id def start_data(self):    return (self.current_page - 1) * self.per_page #當(dāng)前頁(yè)結(jié)束數(shù)據(jù)id def end_data(self):    return self.current_page * self.per_page  #動(dòng)態(tài)生成前端html def pager(self):  page_list = []  half = int((self.show_page - 1)/2)  #如果:總頁(yè)數(shù) < show_page,默認(rèn)顯示頁(yè)數(shù)范圍為: 1~總頁(yè)數(shù)  if self.all_page < self.show_page:   start_page = 1   end_page = self.all_page + 1  #如果:總頁(yè)數(shù) > show_page  else:   #如果:current_page - half <= 0,默認(rèn)顯示頁(yè)數(shù)范圍為:1~show_page   if self.current_page <= half:    start_page = 1    end_page = self.show_page + 1   else:    #如果:current_page + half >總頁(yè)數(shù),默認(rèn)顯示頁(yè)數(shù)范圍為:總頁(yè)數(shù) - show_page ~ 總頁(yè)數(shù)    if self.current_page + half > self.all_page:     end_page = self.all_page + 1     start_page = end_page - self.show_page    else:     start_page = self.current_page - half     end_page = self.current_page + half + 1  #首頁(yè)  first_page = "<li><a href='%s?page=%s'>首頁(yè)</a></li>" %(self.base_url, 1)  page_list.append(first_page)  #上一頁(yè)(若當(dāng)前頁(yè)等于第一頁(yè),則上一頁(yè)無(wú)鏈接,否則鏈接為當(dāng)前頁(yè)減1)  if self.current_page <= 1:   prev_page = "<li><a href='#'>上一頁(yè)</a></li>"  else:   prev_page = "<li><a href='%s?page=%s'>上一頁(yè)</a></li>" %(self.base_url, self.current_page-1)  page_list.append(prev_page)  #動(dòng)態(tài)生成中間頁(yè)數(shù)鏈接  for i in range(start_page, end_page):   if i == self.current_page:    temp = "<li class='active'><a href='%s?page=%s'>%s</a></li>" %(self.base_url, i, i)   else:    temp = "<li><a href='%s?page=%s'>%s</a></li>" % (self.base_url, i, i)   page_list.append(temp)  #下一頁(yè)(若當(dāng)前頁(yè)等于最后頁(yè),則下一頁(yè)無(wú)鏈接,否則鏈接為當(dāng)前頁(yè)加1)  if self.current_page >= self.all_page:   next_page = "<li><a href='#'>下一頁(yè)</a></li>"  else:   next_page = "<li><a href='%s?page=%s'>下一頁(yè)</a></li>" %(self.base_url, self.current_page+1)  page_list.append(next_page)  #末頁(yè)(若總頁(yè)數(shù)只有一頁(yè),則無(wú)末頁(yè)標(biāo)簽)  if self.all_page > 1:   last_page = "<li><a href='%s?page=%s'>末頁(yè)</a></li>" % (self.base_url, self.all_page)   page_list.append(last_page)  return ''.join(page_list)

然后,在views中寫(xiě)方法(此處寫(xiě)在app01中):

from utils.pagnition import PageInfo # 從文件中導(dǎo)入上步自定義的分頁(yè)模塊def custom(request): all_count = models.UserInfo.objects.all().count()  # 獲取要顯示數(shù)據(jù)庫(kù)的總數(shù)據(jù)條數(shù) page_info = PageInfo(request.GET.get('page'), all_count, '/custom.html/',)   # 生成分頁(yè)對(duì)象 user_list = models.UserInfo.objects.all()[page_info.start_data():page_info.end_data()]   # 利用分頁(yè)對(duì)象獲取當(dāng)前頁(yè)顯示數(shù)據(jù) return render(request, 'custom.html', {'user_list': user_list, 'page_info': page_info})  # 模板渲染

然后,在templates目錄下寫(xiě)“custom.html"文件:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>customers</title>{# 引入bootstrap樣式#} <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css"></head><body><h1>customers</h1>{#當(dāng)前頁(yè)顯示的數(shù)據(jù)#}<ul> {% for row in user_list %}  <li>{{ row.name }}</li> {% endfor %}</ul>{#分頁(yè)#} <nav aria-label="Page navigation">  <ul class="pagination">{#    傳入page_info.pager#}   {{ page_info.pager|safe }}  </ul> </nav></body></html>

最后,新增url關(guān)系(urls.py):

 from django.conf.urls import url from django.contrib import admin from app01 import views as app01_views  urlpatterns = [  url(r'^custom.html/$', app01_views.custom), ]

至此,就完成了利用django的分頁(yè)功能自定義分頁(yè)模塊,可以應(yīng)用在不同的業(yè)務(wù)頁(yè)面上。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沙河市| 临朐县| 通化县| 夏津县| 平果县| 隆化县| 饶阳县| 五峰| 分宜县| 子洲县| 莆田市| 承德市| 灌南县| 贡觉县| 清河县| 彰武县| 淳化县| 镇远县| 南安市| 信丰县| 翁牛特旗| 普宁市| 平度市| 富源县| 平凉市| 黄石市| 临邑县| 山丹县| 绥芬河市| 梓潼县| 达拉特旗| 界首市| 略阳县| 海安县| 甘南县| 丰城市| 晴隆县| 鄂托克旗| 会东县| 五峰| 衢州市|