成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Django實現翻頁的示例代碼

瀏覽:22日期:2024-09-05 17:41:49

Django提供了翻頁器。用Django的Paginator類實現

一、views模塊導入Paginator類實現數據分頁

ApiTest/apiviews.py

每行都加了注釋,希望有助于理解。

from django.shortcuts import renderfrom ApiTest.models import ApiTestfrom django.contrib.auth.decorators import login_requiredfrom django.core.paginator import Paginator, EmptyPage, PageNotAnInteger, InvalidPage@login_requireddef api_test_manage(request): username = request.session.get(’user’, ’’) # 獲取所有接口測試數據 apitest_list = ApiTest.objects.all().order_by(’id’) # 生成Paginator對象對數據分頁,每頁顯示10條數據 paginator = Paginator(apitest_list,10) # 使用request.GET.get()函數獲取url中的page參數的數值。默認第1頁 page = request.GET.get(’page’, 1) # 把獲取的當前頁碼數轉換成整數類型 current_page = int(page) try: # 獲取查詢頁數的接口數據列表,page()函數會判斷page實參是否是有效數字。page()函數源碼附在文章的最后apitest_list = paginator.page(page) except PageNotAnInteger:apitest_list = paginator.page(1) except (EmptyPage, InvalidPage): # paginator.num_pagesapitest_list = paginator.page(paginator.num_pages) return render(request, 'apitest_manage.html', {’user’: username, ’apitests’: apitest_list})二、將views的數據渲染到前端模板上

在對應的html文件中加入此段代碼即可。

<div class='container'> <ul id='pager'>{# 上一頁鏈接 #}{% if apitests.has_previous %}<li class='previous'><a href='http://www.piao2010.com/apitest_manage/?page={{ apitests.previous_page_number }}' rel='external nofollow' >上一頁</a></li>{% else %}<li class='previous disabled'><a href='http://www.piao2010.com/bcjs/17009.html#' rel='external nofollow' rel='external nofollow' >上一頁</a></li>{% endif %}{# 中間數字顯示 #}{% for num in apitests.paginator.page_range %} {% if num == currentPage %}<li class='item active'><a href='http://www.piao2010.com/apitest_manage/?page={{ num }}' rel='external nofollow' rel='external nofollow' >{{ num }}</a></li> {% else %}<li class='item'><a href='http://www.piao2010.com/apitest_manage/?page={{ num }}' rel='external nofollow' rel='external nofollow' >{{ num }}</a></li> {% endif %}{% endfor %}{# 下一頁鏈接 #}{% if apitests.has_next %} {# 如果有下一頁,則正常顯示下一頁鏈接 #} <li class='next'><a href='http://www.piao2010.com/apitest_manage/?page={{ apitests.next_page_number }}' rel='external nofollow' >下一頁</a></li>{% else %} <li class='next disabled'><a href='http://www.piao2010.com/bcjs/17009.html#' rel='external nofollow' rel='external nofollow' >下一頁</a></li>{% endif %} </ul></div>三、效果展示

Django實現翻頁的示例代碼

四、Paginator類源碼

此類主要用在views文件

class Paginator: def __init__(self, object_list, per_page, orphans=0, allow_empty_first_page=True):self.object_list = object_listself._check_object_list_is_ordered()self.per_page = int(per_page)self.orphans = int(orphans)self.allow_empty_first_page = allow_empty_first_page def validate_number(self, number):'''Validate the given 1-based page number.'''try: if isinstance(number, float) and not number.is_integer():raise ValueError number = int(number)except (TypeError, ValueError): raise PageNotAnInteger(_(’That page number is not an integer’))if number < 1: raise EmptyPage(_(’That page number is less than 1’))if number > self.num_pages: if number == 1 and self.allow_empty_first_page:pass else:raise EmptyPage(_(’That page contains no results’))return number def get_page(self, number):'''Return a valid page, even if the page argument isn’t a number or isn’tin range.'''try: number = self.validate_number(number)except PageNotAnInteger: number = 1except EmptyPage: number = self.num_pagesreturn self.page(number) def page(self, number):'''Return a Page object for the given 1-based page number.'''number = self.validate_number(number)bottom = (number - 1) * self.per_pagetop = bottom + self.per_pageif top + self.orphans >= self.count: top = self.countreturn self._get_page(self.object_list[bottom:top], number, self) def _get_page(self, *args, **kwargs):'''Return an instance of a single page.This hook can be used by subclasses to use an alternative to thestandard :cls:`Page` object.'''return Page(*args, **kwargs) @cached_property def count(self):'''Return the total number of objects, across all pages.'''c = getattr(self.object_list, ’count’, None)if callable(c) and not inspect.isbuiltin(c) and method_has_no_args(c): return c()return len(self.object_list) @cached_property def num_pages(self):'''Return the total number of pages.'''if self.count == 0 and not self.allow_empty_first_page: return 0hits = max(1, self.count - self.orphans)return ceil(hits / self.per_page) @property def page_range(self):'''Return a 1-based range of pages for iterating through withina template for loop.'''return range(1, self.num_pages + 1) def _check_object_list_is_ordered(self):'''Warn if self.object_list is unordered (typically a QuerySet).'''ordered = getattr(self.object_list, ’ordered’, None)if ordered is not None and not ordered: obj_list_repr = (’{} {}’.format(self.object_list.model, self.object_list.__class__.__name__)if hasattr(self.object_list, ’model’)else ’{!r}’.format(self.object_list) ) warnings.warn(’Pagination may yield inconsistent results with an unordered ’’object_list: {}.’.format(obj_list_repr),UnorderedObjectListWarning,stacklevel=3 )五、Page類源碼

此類主要用在html文件

class Page(collections.abc.Sequence): def __init__(self, object_list, number, paginator):self.object_list = object_listself.number = numberself.paginator = paginator def __repr__(self):return ’<Page %s of %s>’ % (self.number, self.paginator.num_pages) def __len__(self):return len(self.object_list) def __getitem__(self, index):if not isinstance(index, (int, slice)): raise TypeError(’Page indices must be integers or slices, not %s.’% type(index).__name__ )# The object_list is converted to a list so that if it was a QuerySet# it won’t be a database hit per __getitem__.if not isinstance(self.object_list, list): self.object_list = list(self.object_list)return self.object_list[index] def has_next(self):return self.number < self.paginator.num_pages def has_previous(self):return self.number > 1 def has_other_pages(self):return self.has_previous() or self.has_next() def next_page_number(self):return self.paginator.validate_number(self.number + 1) def previous_page_number(self):return self.paginator.validate_number(self.number - 1) def start_index(self):'''Return the 1-based index of the first object on this page,relative to total objects in the paginator.'''# Special case, return zero if no items.if self.paginator.count == 0: return 0return (self.paginator.per_page * (self.number - 1)) + 1 def end_index(self):'''Return the 1-based index of the last object on this page,relative to total objects found (hits).'''# Special case for the last page because there can be orphans.if self.number == self.paginator.num_pages: return self.paginator.countreturn self.number * self.paginator.per_page

到此這篇關于Django實現翻頁的示例代碼的文章就介紹到這了,更多相關Django 翻頁內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Django
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
成人高清伦理免费影院在线观看| 精品国产青草久久久久福利| 91精品欧美福利在线观看| 一级做a爱片久久| 国内在线观看一区二区三区| 久久嫩草精品久久久精品一| 国产精品一卡二| 欧美老年两性高潮| 国内精品久久久久影院色| 欧美羞羞免费网站| 亚洲国产综合人成综合网站| 一本综合精品| 一区二区三区免费网站| 日韩久久免费av| 99在线精品免费| 国产清纯在线一区二区www| 欧美.www| 精品影视av免费| 欧美色综合网站| 国产一区二区三区最好精华液| 欧美性大战久久| 国产在线精品一区二区不卡了| 欧美日韩精品一区二区天天拍小说| 男人的j进女人的j一区| 在线观看三级视频欧美| 日韩二区三区在线观看| 欧美艳星brazzers| 国产一区二区三区久久悠悠色av| 欧美精品成人一区二区三区四区| 国产美女一区二区| 精品国产网站在线观看| 99视频国产精品| 亚洲国产精品t66y| 国产日韩欧美一区二区| 视频一区二区不卡| 欧美日本视频在线| 成人av网站在线观看免费| 国产亚洲欧美日韩俺去了| 亚洲国产激情| 午夜成人在线视频| 欧美久久久久免费| 成人av网址在线观看| 国产精品麻豆一区二区| 国产区欧美区日韩区| 天堂在线亚洲视频| 8x8x8国产精品| av亚洲精华国产精华| 国产精品美女www爽爽爽| 午夜一区不卡| 精品一区二区免费看| 久久一留热品黄| 99re热精品| 看片网站欧美日韩| 久久亚洲春色中文字幕久久久| 亚洲国产午夜| 免费精品99久久国产综合精品| 欧美顶级少妇做爰| 欧美精品二区| 午夜av区久久| 日韩一区二区三区观看| 欧美日韩一区二区视频在线观看 | 午夜一区二区三区在线观看| 欧美亚男人的天堂| 99精品视频在线免费观看| 一区二区在线观看视频在线观看| 欧美伊人精品成人久久综合97 | 宅男噜噜噜66一区二区66| 99r精品视频| 亚洲伊人色欲综合网| 欧美三级日韩三级国产三级| 97久久精品人人做人人爽| 亚洲制服丝袜av| 777xxx欧美| 伊人精品视频| 精品亚洲成a人| 久久综合色鬼综合色| 国产视频一区在线观看一区免费| 狠狠久久亚洲欧美| 综合欧美亚洲日本| 717成人午夜免费福利电影| 在线观看亚洲| 美女脱光内衣内裤视频久久网站| 久久久久久久久99精品| 麻豆成人在线播放| av激情综合网| 午夜视黄欧洲亚洲| 久久久久久久久蜜桃| 鲁大师影院一区二区三区| 成人高清在线视频| 亚欧色一区w666天堂| 久久亚洲精华国产精华液| 色综合久久天天| 午夜日韩视频| 国产专区综合网| 一区二区三区四区高清精品免费观看 | 色综合天天综合网天天狠天天 | 亚洲精选视频在线| 欧美一区二区在线观看| 国产欧美日韩综合精品二区| 福利电影一区二区| 一区二区三区在线播| 欧美成人三级电影在线| 国产乱码精品一区二区三区不卡| 高清国产一区二区| 亚洲福利视频导航| 久久亚洲精精品中文字幕早川悠里 | 色综合天天做天天爱| 免费观看在线色综合| 国产精品久久久久一区| 欧美精品v国产精品v日韩精品 | 欧美xxxx在线观看| 亚洲一区久久| 欧美激情1区2区3区| 精品一区二区三区在线观看国产| 亚洲四区在线观看| xfplay精品久久| 欧美伦理影视网| 奶水喷射视频一区| 黄色av成人| 不卡的av中国片| 国内久久精品视频| 亚洲成人av资源| 国产精品久久夜| 精品福利av导航| 6080日韩午夜伦伦午夜伦| 美女黄色成人网| 狠狠色丁香久久综合频道| 国产成人免费av在线| 男女性色大片免费观看一区二区 | 精品亚洲免费视频| 亚洲国产va精品久久久不卡综合| 国产免费成人在线视频| 6080日韩午夜伦伦午夜伦| 欧美亚洲在线| 亚洲天堂久久| 91丨porny丨国产| 懂色av一区二区在线播放| 精品在线你懂的| 青青草伊人久久| 亚洲高清在线精品| 亚洲欧美日韩在线不卡| 国产精品色噜噜| 久久蜜桃一区二区| 精品国产一区二区精华| 欧美一二三区精品| 欧美日韩一级二级三级| 一本一道综合狠狠老| 国产精品久久国产愉拍| 国模吧视频一区| 欧美国产三区| 欧美成人综合| 欧美成人中文| 欧美日本韩国一区二区三区| 欧美一区二区三区久久精品| 成人一区二区三区中文字幕| 国产在线精品一区二区| 久久精品国产亚洲一区二区三区| 日本伊人精品一区二区三区观看方式| 亚洲国产精品一区二区www在线| 亚洲欧美日韩在线播放| 亚洲欧洲日韩在线| 国产精品不卡在线观看| 欧美国产综合色视频| 久久精品视频网| 国产欧美日产一区| 中文子幕无线码一区tr| 中文字幕 久热精品 视频在线| 国产片一区二区| 国产欧美日韩精品一区| 国产欧美久久久精品影院| 国产欧美日韩视频在线观看| 久久先锋影音av| 国产欧美一区二区在线| 中文字幕va一区二区三区| 国产精品久久久久精k8| 亚洲欧洲精品一区二区三区| 国产精品国产三级国产普通话蜜臀 | gogogo免费视频观看亚洲一| av亚洲精华国产精华精| 99riav久久精品riav| 色综合久久综合网| 欧美日韩在线高清| 极品日韩av| 亚洲乱码视频| 一本色道久久综合亚洲精品不卡 | 欧美电视剧在线观看完整版| 欧美成人官网二区| 色先锋久久av资源部| 国产精品久久久免费| 亚洲欧美大片| 在线观看免费成人| 777亚洲妇女| 久久久亚洲欧洲日产国码αv| 国产无遮挡一区二区三区毛片日本| 久久久久国产精品厨房| 中文字幕第一区第二区| 亚洲综合激情小说| 免费观看日韩电影| 高清日韩电视剧大全免费| 欧美区亚洲区|