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からダウンロードできる。