문서 동기화하여이 문서는 정원을 블로그에 밀어, 디스플레이 레이아웃이 잘못 될 수있다, 용서해주십시오!
설명 : 장고 프레임 워크 구축 매김는 하지만, 그것은 단지 복잡한 기능을 구현하기 어려운 간단한의 요구를 충족 할 수 있습니다.
구현 코드 :
#!는 / usr / 빈 / ENV의 python3의 # - * - 코딩 : UTF-8 - * - __auth__ = '송 웨이'를 가져 오기 mark_safe을 django.utils.safestring에서 수학 가져 오기 올림에서 클래스 매기기 : ''사용자 지정 페이징 기능을 ', 지원 설정 탭의 속성, 쇼 지원 페이지, 페이지 점프 후 지원 요소의 위치를 다른 GET 매개 변수의 유지를지지했다. 사용 가능한 속성은 다음과 같이 관련 : 데이터 수집 위치 시작 시작 데이터 수집 최종 위치가 종료 이전 페이지 prvePage nextPage 다음 페이지 maxPage 총 페이지 pvreCode 이전의 표시 텍스트 nextCode 다음 표시 텍스트 ATTR 태그는 일반적인 인수 속성 이 페이지를 획득 current_attr 태그 속성 템플릿 언어에 직접 사용되는 HTML 생성 HTML 태그 부트 스트랩 부트 스트랩 직접 매김 스타일 부트 스트랩을 가져와야을 (대형), SM (작은) 만 템플릿이 활성화되어 배치 LG를 부트 스트랩 bootstrap_size 지정된 ID를에 위치하는 HTML 페이지 점프 지원하는 위치에 관련된 다음과 같은 방법을 사용할 수 있습니다 않은 setattr을 (ATTR, current_attr는 = 없음, 상속 = TRUE)는 탭을 설정하지 속성 '' '는 __init의 __ DEF (. 자아에서는 totalCount, perPage, currentPage = 1 pagerNumRange = 0 argName ='P '를 kwargs로 = {}) : ' '에서는 totalCount 데이터 양 총 perPage 페이지 수를 나타낸다 현재 페이지 currentPage pagerNumRange에 많은 디지털 중간 다음 페이지 기본 (0) 표시되지 않은 방법 / 디스플레이 P의는 GET에 argName 페이지 전송 매개 변수 이름 기본값을 kwargs로 다른 매개 변수를 보완 GET은 일반적으로 비어 있거나 직접``request.GET``에있는 '' ' self.maxPage = 천장을 만들다 (에서는 totalCount / perPage) 은 try : 자기.currentPage = INT (currentPage) 제외 : . self.currentPage 1 = self.pagerNumRange = self._pager_num_range (pagerNumRange) self.argName = argName self.kwargs = ' K 들면 kwargs.items에서 V () 의 경우 K = self.argName! self.kwargs + ='% S = % S 및 '% (K, V) self.end = self.currentPage * perPage self.start = self.end - perPage self.prvePage self.currentPage = - 1 self.currentPage 다른 경우> 1 self.nextPage = self.currentPage + 1이면 self.currentPage <self.maxPage 다른 self.maxPage의 self.pattern = '<A ATTR {} HREF = "{} kwargs로 argname {} = {} HREF"> </A> 콘텐츠 {} 자기. ATTR, self._current_attr = '', '' 자기.bootstrap_size = '' = self.position '' self.pvreCode, self.nextCode = '& laquo; 저작권을', '보기 & raquo;' @Property DEF의 current_attr (자체) : '이 페이지를 태그' ''속성을 반환 '' : self._current_attr이 경우 자기를 반환합니다. _current_attr 다른 : 리턴 self.attr의 DEF의 _pager_num_range (자기, pager_num_range) '' '페이지 번호의 페이지 디스플레이리스트' ''를 IF pager_num_range == 0 : [] 복귀 다른 : (self.currentPage 시작 = 지능 - (pager_num_range -1) / 2) 종료 = INT (. (+ self.currentPage (pager_num_range - 1) / 2)) . 시작 <1 IF : 끝 + = 1 - 시작 시작 = 1 IF 끝> self.maxPage : 끝 = self.maxPage IF 끝> self.maxPage : 시작 - 종료 = - self.maxPage 끝 = self.maxPage IF 시작 <1 :. . 시작 1 = 범위 (시작, 종료를 반환 + 1) DEF의 않은 setattr (자체, ATTR, current_attr = 없음, 상속 = 참) : '' '태그를 설정 속성 ATTR 일반 태그 속성을 현재 페이지 추가 속성으로 설정 current_attr ' '일반 레이블 속성 상속 상속 현재 페이지 속성' 자체. ATTR = ' K, attr.items에서 V () 대 : self.attr + ='%의 S = "%의 S" '% (K, V) 만약 current_attr : self._current_attr = '' 의 경우 유산 : K 들면 attr.items ()에서 V : current_attr K의 경우 : self._current_attr + = '% S = "% S"'% (K, current_attr [K] ) 다른 : self._current_attr + = '% S = "% S"'% (K, V) current_attr.keys ()에 대한 K - attr.keys () self._current_attr + = '% S = "% s의 " '% (K, current_attr [K]) 다른 : K 들면 current_attr.items에서 V () self._current_attr + ='% S ="% S " '% (K,V는)되는 속성 html로 데프 있습니까 ()자가되지 않습니다 : ''HTML을生成'' pagelist = ' pagelist + = self.pattern.format (ATTR = self.attr, HREF = str을 (R) + 위치 위치 = '#'를 + 본인.위치의 경우 self.position 다른 ' 경우 self.currentPage> 1 : pagelist = self.pattern.format (ATTR = self.attr, HREF = str을 (self.prvePage) + 위치 kwargs로 self.kwargs =, = argname self.argName 콘텐츠 = self.pvreCode) self.pagerNumRange에 대한 연구 : 만약 R == self.currentPage : pagelist + = self.pattern.format (ATTR = self.current_attr, HREF = str을 (R) + 위치 kwargs로 self.kwargs =, = argname self.argName 콘텐츠 = R) 다른 : kwargs로 self.kwargs =, = argname self.argName 콘텐츠 = R) 의 경우 self.currentPage <self.maxPage : pagelist + = self.pattern.format (ATTR = self.attr, HREF = str을 (self.nextPage) + 총수 , kwargs로 = self.kwargs, argname = self.argName, 내용 = self.nextCode) 반환 mark_safe (pagelist)는 @property DEF) 자기 (부트 스트랩 : '直接使用부트 스트랩样式' HTML = '' ' <탐색 아리아 라벨 = " 페이지 탐색 "> <UL 클래스 ="매김 "> {페이지} </ UL> </ 탐색> '' ' 이전 = '' ' <LI {해제}> <a href="{prvePage}" aria-label="Previous"> <스팬 아리아 - 숨겨진 = "진정한"> %의 </ SPAN> </a>를 </ 리> ''% self.pvreCode 다음 = '' ' <리튬 {비활성화}> <a href="{nextPage}" aria-label="Next"> <스팬 아리아 숨겨진 = "참"> S % </ SPAN> </a>에 </ 리> '' % self.nextCode pagelist = ' 위치 ='# '+ self.position 경우 다른 self.position' self.pagerNumRange에 대한 R : 만약 R == self.currentPage : HTML html.replace = ( '페이징', '페이징 pagination- % S'% self.bootstrap_size) 경우 self.currentPage> 1 : pagelist + = '<리 클래스 = "활성 "> <A href="?%s%s=%s%s"> S % <스팬 클래스 ="SR 전용 "> (전류) </ SPAN> </A> </ 리> '% ( self.kwargs, self.argname, R 위치, R) 다른 : pagelist + = '<LI> <A href="?%s%s=%s%s"> % S </A> </ 리>'% (self.kwargs, self.argName, R, 위치 , R) 의 경우에 self.bootstrap_size ( 'LG', 'SM') 이전 = Previous.format (prvePage = % (self.kwargs는 self.argName, self.prvePage) + 위치가 비활성화 = '' '%의 %의 = % S?') 다른 사람 : 이전 = Previous.format (prvePage = '#', = '클래스 = "장애인"') 비활성화 할 경우 self.currentPage <self.maxPage : '? %의 %의 = % S'다음 = Next.format (nextPage = % (self.kwargs, self.argName을 , self.nextPage) + 위치, 해제 = '') 다른 사람 : 다음 = Next.format (nextPage = '#', = 해제 '클래스 = "장애인"') 반환 mark_safe (html.format을 (페이지 = 이전 + pagelist + 다음 것))
예 전화 :
보기에서 의 평
페이지 = 매기기 ( LEN (USER_LIST) , (15) , (P) , (7) , 'P' , request.GET)
page.setattr은 ( ATTR = { '클래스' : 'btn을 BTN-기본' } , current_attr은 = { '클래스' : 'BTN-기본 활성 btn을' })
page.size = 'LG'
돌아 렌더링 ( 요청, '웹 / index.html을'{: 페이지, 'USER_LIST': 'PAGE'USER_LIST을 [page.start : page.end]})
템플릿 tempaltes에서
{{ PAGE . HTML }} 或者 {{ PAGE . 부트 스트랩 }}
부트 스트랩 스트랩이 지나치게 집합하지 않고, 직접 매김 스타일을 이용하고, HTML 방법 등 매기기 특성, 유연성을 설정한다.