44899


どのように１ページごとに表示させるアイテム数とページネータをコントロールすればいいでしょうか？

５つの要素を１つのhtml上に表示させたいです。  
例えば、２１この要素があった時、５つのページを作ってそれぞれに５つずつ配置したいです。

app.pyに

[code]

    from flask_paginate import Pagination, get_page_parameter
    
    @app.route("/page", methods=["GET","POST"])
    def page():
    
        users = {
            "data":[
                {
                    “Name”:”Tom”,
                    “Age”:”21”
                },
                {
                    “Name”:”John”,
                    “Age”:”40”
                },
                {
                    “Name”:”Juddy”,
                    “Age”:”37”
                },
                {
                    “Name”:”Kei”,
                    “Age”:”46”
                },
                {
                    “Name”:”Wu”,
                    “Age”:”12”
                },
                {“Name”:”Rey”,
                    “Age”:”47”
                },
                {
                    “Name”:”Boo”,
                    “Age”:”25”
                },
                {
                    “Name”:”Cho”,
                    “Age”:”48”
                }
            ],
            “Date”:”20180403”
        }
    
       users = users["data"]
    
    
        page = request.args.get(get_page_parameter(), type=int, default=5)
        pagination = Pagination(page=page, total=len(users), search=search)
    
    
        return render_template(“index.html", json=users,pagination=pagination)
    
[/code]

と書いて、index.htmlに

[code]

    <div>
        {% for i in range(json|length) %}
        <div>
                <h3>{{ json[i]['Name'] }}</h3>
            <h3>{{ json[i]['Age'] }}</h3>
        </div>
        {% endfor %}
    </div>
    
    {{ pagination.info }}
    {{ pagination.links }}
    
[/code]

と書きました。  
しかし、今の状態だと、８つの要素全てが１つのhtmlに表示されてしまいます。  
５つの要素を１つのページに、３つの要素を別のページに表示される仕組み・ページネータを作るには何が問題でしょうか？またどう修正すればいいでしょうか？

*以前、<https://stackoverflow.com/questions/50920528/how-can-i-control-the-number-of-items-are-shown-in-one-html> にも投稿しました。  
回答が求めているものではなかったのでこちらにも投稿させていただきます。


CC BY-SA 4.0
2018-06-19T08:48:16.210
44885
2018-06-20T07:54:47.137
2018-06-20T06:40:59.767
15171
29001
question
python html flask
どのように１ページごとに表示させるアイテム数とページネータをコントロールすればいいか


表示するデータの個数が多い場合には、複数のページに分割する「ページネーション」を使用しますが、flaskの場合には`flask-
paginate`という拡張機能を使うと「ページネーション」の機能を容易に追加できます。

`flask-
paginate`では、クエリーパラメータに`page`を使うのがデフォルトで、最初のページのURLは`http://example.com/page`又は`http://example.com/page?page=1`、次のページのURLは`http://example.com/page?page=2`というようになります。

`request.args.get`の`default`オプションはクエリーパラメータがない場合のデフォルトの値になるので`1`にします。そうしておいて、`users`のデータから、最初のページであれば[0:5]、次のページであれば[5:10]でスライスすれば、最初のページには５つの要素が、次のページには3つの要素が表示されるようにできます。

[code]

    page = request.args.get(get_page_parameter(), type=int, default=1)
    page_users = users[(page - 1)*5: page*5]
    
[/code]

テンプレートには、`json=users`とすべてのデータを渡すのではなく、`json=page_users`として該当のページのデータだけを渡すようにします。

[code]

    return render_template(“index.html", json=page_users,　pagination=pagination)
    
[/code]

また、`pagenation`の設定の箇所では、searchという変数が定義されていないので`False`に修正し、ページ当たりの表示数を`per_page`オプションで設定します。

[code]

    pagination = Pagination(page=page, total=len(users), search=False, per_page=5)
    
[/code]


CC BY-SA 4.0
2018-06-19T18:16:27.607
44899
2018-06-20T07:54:47.137
2018-06-20T07:54:47.137
15171
15171
44885
answer