遠位タブ表示をフラスコ

#フロントページの表示をフラスコ

1.ソート原理

大量のデータを照会し、Webを表示する3つの方法があります。

  • すべてのお問い合わせは、データベースからの端面図/クライアント/ページングで上映、記録のほとんどが使用していない一般的に、状況に対処することはできません。
  • データベースの数が複数のクエリ、ページネーションクエリ、各データベースクエリ内のクエリデータは、ページの特定の要求に応じて決定されます。
  • またページングが、(例えば10など)クエリ複数のページ、ビューに実装クライアント1に、第二の方法よりも低減の観点からデータベース要求が、サーバーのオーバーヘッドが大きくなります。

2.実現

ページングは​​、機能の点から二つに分け:

  • 現在のページを取得し、HTMLテンプレートにコンテンツを追加します。
  • 設定の「前の」」他のHTMLページのコンテンツの後、テンプレートに追加。

一般的にページング・クラスを使用して実装、それはカスタマイズすることができ、
もちろん、フレーム、FlaskSQLAlchemがページ区切り型オブジェクト。Queryオブジェクトの呼び出しは、ページネーションオブジェクトを取得する方法をパジネート。

2.1ページングクラス

ページングクラス以下の機能:

  1. シリアル番号の現在のページレコード、ページあたりのような20のレコード、5ページを決定する、ページレコードIDは81-100であるべきです。
  2. ブロックコードを生成された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デモンストレーション効果

デモンストレーション効果:

無し

おすすめ

転載: www.cnblogs.com/wodeboke-y/p/11610129.html
おすすめ