Google App Engineでページング

Google App Engineでページング | 山本隆の開発日誌」より。

Google App Engineでページングを行う方法

  • App Engine でページングを行う方法 – Google App Engine – Google Code

    Google App Engineの公式サイトより。

    「fetch(limit, offset=0)」は時間がかかるために使用しない方がいい。

    では、どうすればいいか。

    基本的な考え方と実装法が紹介されている。

  • App Engine Recipe – Efficient paging for any query and any model

    ページングを行うクラス。使い方も簡単でわかりやすい。

    Kayで使用する例

    bookmark = request.values.get('bookmark'))
    query = PagerQuery(MyModel).filter('foo >', 'bar').order('foo')
    prev, results, next = query.fetch(10, bookmark)

    resultsにはモデルのデータ一覧が、prevとnextにはページがなければNone、あれば文字列が入る。

    myapp/views.py

    def index(request):
    bookmark = request.values.get('bookmark'))
    query = PagerQuery(MyModel).filter('foo >', 'bar').order('foo')
    prev, results, next = query.fetch(10, bookmark)
    return render_to_response('myapp/index.html',
    {'prev': prev, 'next': next, 'result': result})

    myapp/templates/index.html

    {% for model in result -%}
    <p>{{model.foo}}</p>
    {% endfor -%}

    {% if prev -%}
    <a href="{{url_for('myapp/index', bookmark=prev)}}">前のページ</a>
    {% endif -%}
    {% if next -%}
    <a href="{{url_for('myapp/index', bookmark=next)}}">次のページ</a>

    {% endif -%}

    ソースコードは、moraes / appengine / source — bitbucket.orgからダウンロードできる。