#フロントページの表示をフラスコ
1.ソート原理
大量のデータを照会し、Webを表示する3つの方法があります。
- すべてのお問い合わせは、データベースからの端面図/クライアント/ページングで上映、記録のほとんどが使用していない一般的に、状況に対処することはできません。
- データベースの数が複数のクエリ、ページネーションクエリ、各データベースクエリ内のクエリデータは、ページの特定の要求に応じて決定されます。
- またページングが、(例えば10など)クエリ複数のページ、ビューに実装クライアント1に、第二の方法よりも低減の観点からデータベース要求が、サーバーのオーバーヘッドが大きくなります。
2.実現
ページングは、機能の点から二つに分け:
- 現在のページを取得し、HTMLテンプレートにコンテンツを追加します。
- 設定の「前の」」他のHTMLページのコンテンツの後、テンプレートに追加。
一般的にページング・クラスを使用して実装、それはカスタマイズすることができ、
もちろん、フレーム、FlaskSQLAlchemがページ区切り型オブジェクト。Queryオブジェクトの呼び出しは、ページネーションオブジェクトを取得する方法をパジネート。
2.1ページングクラス
ページングクラス以下の機能:
- シリアル番号の現在のページレコード、ページあたりのような20のレコード、5ページを決定する、ページレコードIDは81-100であるべきです。
- ブロックコードを生成されたHTMLページは、メソッドpage_htmlにより実現されます。
urllib.parse輸入でurlencodeから、引用、にunquote クラスページネーション(オブジェクト): "" " 自定义分页 """ デフ__init __(自己、CURRENT_PAGE、TOTAL_COUNT、BASE_URL、パラメータ、per_page_count = 10、max_pager_count = 10): 試してみてください。 CURRENT_PAGE = INT(CURRENT_PAGE) Eなどの例外を除い: CURRENT_PAGE = 1 であればCURRENT_PAGE <= 1: CURRENT_PAGE = 1 self.current_page = CURRENT_PAGE #数据总条数 self.total_count = TOTAL_COUNT #每页条10显示数据 self.per_page_count = per_page_count #ページの最大ページ数が表示されるはずです max_page_num 、DIV = divmod(TOTAL_COUNT、per_page_count) DIV IF: max_page_num + = 1。 self.max_page_num = max_page_num デフォルトページ#11ディスプレイ(このページの中央にある)ページ番号の self.max_pager_count = max_pager_count self.half_max_pager_count = INT((max_pager_count - 1)/ 2。) #URLプレフィックス 自己。 = BASE_URL BASE_URLの # `request.GET`` インポートコピー のparams = copy.deepcopy(paramsは) #params._mutable =真 get_dictのparams.to_dict =() すべての検索/検索条件の現在のリストを含む#ページ #{源:[2、] 、 ステータス:[2]、性別:[2]、コンサルタント:[1]、ページ:[1]} 。#ソース・ステータス= 2 = 2 = 2&性別&コンサルタント= = 8.1&ページ #1 self.params [ページ] = 8。 #1 self.params.urlencode() #1 HREF = "/ホスト/?ソース= 2&ステータス= 2&性別= 1&ページ= 8 = 2&コンサルタント" #1 HREF = "%sの?%S" %(self.base_url、self.params.urlencode( )) self.params = get_dict @property DEF(自己)開始: リターン(self.current_page - 1)* self.per_page_countの @propertyは DEF(自己)終了: 戻りself.current_page * self.per_page_countの デフpage_html(自己): #如果总页数<= 11 の場合self.max_page_num <= self.max_pager_count: pager_start = 1 pager_end = self.max_page_num #总页数> 11如果 他: #もし、現在のページ<= 5 もしself.current_page <= self.half_max_pager_count: pager_start = 1 pager_end = self.max_pager_count 他: #当前页+ 5>总页码 IF(self.current_page + self.half_max_pager_count)> self.max_page_num: pager_end = self.max_page_num pager_start = self.max_page_num - self.max_pager_count + 1#倒这数11个 他: pager_start = self.current_page - self.half_max_pager_count pager_end = self.current_page + self.half_max_pager_count page_html_list = [] #{源:[2]、ステータス:[2]、性別:[2]、コンサルタント:[1]、ページ:[1]} #首页 self.params [ 'ページ'] = 1 FIRST_PAGE = ' 首页 ' %(self.base_url、でurlencode(self.params)) page_html_list.append(FIRST_PAGE) #上一页 self.params [ "ページ"] = self.current_page - 1 self.paramsなら[ "ページ" <= 1 : pervious_page = ' 上一页 ' %(self.base_url、でurlencode(self.params)) 他: pervious_page = ' 上一页 ' %(self.base_url、でurlencode(self.params)) page_html_list.append(pervious_page) #中间页码 のIの範囲内(pager_start、pager_end + 1): self.params [ 'ページ'] = I どうか== self.current_page: TEMP = " %sの'%(self.base_url、でurlencode(self.params)、I、) それ以外: TEMP =' %sの '%(self.base_url、でurlencode(self.params)、I、) page_html_list.append(TEMP) #下一页 self.params [ "ページ"] = self.current_page + 1 であればself.params [ "ページ"]> self.max_page_num: self.params [ "ページ"] = self.current_page にnext_page = ' 下一页 ' %( self.base_url、でurlencode(self.params)) page_html_list.append(にnext_page) #尾页 self.params [ 'ページ'] = self.max_page_numparams)) 他: next_page = ' 下一页 ' %(self.base_url、でurlencode(self.params)) LAST_PAGE = ' 尾页 ' %(self.base_url、でurlencode(self.params)) page_html_list.append(LAST_PAGE) リターン'' .join(page_html_list)
2.2ルーティング
@ app.route( '/ list_t'、メソッド= [ 'GET']) DEF list_t(): ori_data = [ '第一列'、 '第二列'、 '空列'] のLi = [] xの中の範囲(1000): li.append(ori_data + [X]) pager_obj =改ページ(request.args.get( "ページ"、1)、LEN(LI)、request.path、request.args、per_page_count = 10) index_list =リー[pager_obj.start:pager_obj.end] pagination_html = pager_obj.page_html() 戻りrender_template( "list_paper.html"、index_list = index_list、HTML = pagination_html)
2.3 HTMLコード
わずかに
2.4デモンストレーション効果
デモンストレーション効果: