향상된 페이징 구성 요소 장고 프레임 워크에서

문서 동기화하여이 문서는 정원을 블로그에 밀어, 디스플레이 레이아웃이 잘못 될 수있다, 용서해주십시오!

설명 : 장고 프레임 워크 구축 매김는 하지만, 그것은 단지 복잡한 기능을 구현하기 어려운 간단한의 요구를 충족 할 수 있습니다.

구현 코드 :

#!는 / 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 방법 등 매기기 특성, 유연성을 설정한다.

추천

출처www.cnblogs.com/lazyfish007/p/11487542.html