カスタムページングと保存した検索条件

  1  ""」
  2  分页组件使用示例:
   3  
  4      OBJ =改ページ(request.GET.get( 'ページ'、1)、(USER_LIST)lenは、request.path_info)
   5      page_user_list = USER_LIST [obj.start:obj.end ]
   6      page_html = obj.page_html()
   7  
  8      リターン(要求、 'index.htmlを' { 'ユーザ':page_user_list、 'page_html':page_html})レンダリング
   9  
10  
11  ""」
12  
13  
14  クラスページ区切り(物体) :
 15  
16      DEF  __init__(自己、CURRENT_PAGE、all_count、要求、per_page_num = 2、pager_count = 11 ):
 17          """ 
18         ページングデータパッケージ
 19。  のparam CURRENT_PAGE:このページ
 20がある         :のparam ALL_COUNTは、次のとおり、データベース内のデータの総数
 21          ページあたりのデータの数が表示されます:: PARAM per_page_num
 22がある         :のparam pager_count:まで表示ページ番号に
 23          「」 " 
24  
25          試み26である              CURRENT_PAGE = INT(CURRENT_PAGE)
 27          を除く:例外としてE
 28              。CURRENT_PAGE 1 =
 29  
30          IF CURRENT_PAGE <1 31である              CURRENT_PAGE 1 =
 32  
33である          self.current_page = CURRENT_PAGE
34  
35          self.all_count = all_count
 36          self.per_page_num = per_page_num
 37  
38  
39          总页码
40          all_pager、TMP = divmod(all_count、per_page_num)
 41          であればTMP:
 42              + = 1 all_pager
 43          self.all_pager = all_pager
 44  
45  
46          自己。 pager_count = pager_count
 47          self.pager_count_half = INT((pager_count - 1)/ 2 48  
49          保存搜索条件
50          インポートコピー
 51          self.params = copy.deepcopy(request.GET)
 52  
53      @property
 54は     デフ(自己)開始:
 55          リターン(self.current_page - 1)* self.per_page_num
 56  
57      @property
 58      デフ端(自己):
 59          戻り self.current_page * self.per_page_num
 60  
61      DEF page_html(自己):
 62          如果总页码<11个:
63          であれば self.all_pager <= self.pager_count:
 64              pager_start = 1
 65             + = self.all_pager 1 pager_end。
 66          総P> 11。
67          、他68              このページのページ番号が11月2日<=ページまでに表示された場合は
69              のIF self.current_page <= self.pager_count_half:
 70                  。pager_start 1 =
 71である                  pager_end = 。+ 1 self.pager_count
 72  
73である             このページよりも大きい5。
74              75                  #の最後のページをめくる
76                  IF(self.current_page self.pager_count_half +)> self.all_pager:
 77                      。pager_end = self.all_pager 1 +
 78                     pager_start = self.all_pager - self.pager_count + 1
 79                  80                      pager_start = self.current_page - self.pager_count_half
 81                      pager_end = self.current_page + self.pager_count_half + 1
 82  
83          page_html_list = []
 84  
85          FIRST_PAGE = ' <LI> <a href="?page=%s">首页</a>に</ LI> '%(1 86          page_html_list.append(FIRST_PAGE)
 87  
88          であれば self.current_page <= 1 89              PREV_PAGE =' <LIクラス= "無効"> <a href="#">上一页する</a>ます。</ li> ' 
90          91              PREV_PAGE = " <LI> <A HREF = "ページ=%sの?" >上一页</a>の</ LI> '%(self.current_page - 1 92  
93          page_html_list.append(PREV_PAGE)
 94  
95          のための I における範囲(pager_start、pager_end):
 96              self.params [ ' ページ' ] = I
 97              もし私== self.current_page:
98                  TEMP = "<LIクラス= "アクティブ"> <a href="?%s">%S </a>の</ LI> '(self.params.urlencode()、I、)
 99              100                  TEMP = ' < LI> <a href="?%s">%S </a>の</ LI> '(self.params.urlencode()、I)
 101              page_html_list.append(TEMP)
 102  
103          もし self.current_page> = self.all_pager:
 104              にnext_page = ' <LIクラス= "無効"> <a href="#">下一页する</a>ます。</ li> ' 
105          106              にnext_page = ' <LI> <a href="?page=%s">下一页</a>に</ LI> '%(self.current_page + 1 107          page_html_list.append(にnext_page)
 108  
109          LAST_PAGE = ' <LI> <a href="?page=%s">尾页</a>の</ LI> '(自己.all_pager)
 110          page_html_list.append(LAST_PAGE)
 111  
112          戻り '' .join(page_html_list)
page.py
1  から django.shortcutsはインポート、レンダリングのHttpResponse
 2  から app01 輸入モデル
 3つの 
4  #がここにあなたの意見を作成します。
5  デフ指数(要求):
 6      リー= [] 
7      範囲のiについて(100):
8           li.append(models.Book(名= "图书%S" %I、価格= 10 + I))
9      models.Book.objects.bulk_create(LI)
10      リターンのHttpResponse( 'OK')
11      から app01.page インポート改ページ
 12     current_page_num = request.GET.get(' ページ'、1 13      book_list = models.Book.objects.all()
 14      改ページ= ページ区切り(current_page_num、book_list.count()、リクエスト)
 15      book_list = book_list [pagination.start。 pagination.end]
 16      リターンが(リクエスト、レンダリング' index.htmlを'、地元の人々を())
views.py
1  <!DOCTYPE HTML > 
2  < HTML のlang = "EN" > 
3  < ヘッド> 
4      < メタのcharset = "UTF-8" > 
5      < タイトル>タイトル</ タイトル> 
6      < リンクREL = "スタイルシート" のhref = "/静的/ブートストラップ3.3.7-DIST / CSS / bootstrap.css」> 
7  </ ヘッド> 
8  < ボディ> 
9  < UL >
     {book_list%で書籍の%}
 11      < リチウム> {{book.name}} --- {{book.price}} </ > 
12      {%ENDFOR%}
 13  </ UL > 
14  < NAV ARIAラベル= "ページナビゲーション" > 
15    < UL クラス= "ページネーション" > 
16      {{pagination.page_html |安全}}
 17    </ UL > 
18  </ NAV > 
19  
20  </ ボディ> 
21  </ HTML >
index.htmlを

 

おすすめ

転載: www.cnblogs.com/xuqidong/p/12231766.html