2013-07-08 60 views
3

我有一個Flask應用程序,我想要顯示來自MongoDB集合的分頁表數據。但是,這個集合中可能有很多文檔,所以我想暫時加載它們 - 只加載即將顯示的文檔。高效的分頁與瓶和Mongoengine

我的問題是,在我的應用程序在一個頁面上,我想分頁:

Stuff.objects()

但在不同的頁面,我想分頁:

Stuff.objects(__raw__=query)Stuff.objects(message__in=Message.objects(__raw__=query))

調用這些特定函數會自動將所有相關對象加載到內存中(正如我通過運行locals()發現的),所以我需要分頁他呼籲有:

Stuff.objects().skip(number).limit(pagelength),或 Stuff.objects(__raw__=query).skip(number).limit(pagelength)

所以它似乎我需要一個分頁程序類,我可以簡單地傳遞到Report,然後以某種方式指定查詢的信息。

任何人都可以推薦一個解決方案嗎?

+0

你見過這個片段? http://flask.pocoo.org/snippets/44/ – codegeek

回答

6

嘗試使用從flask-mongoenginepaginator您可以使用它像這樣:

paginator = Pagination(Post.objects, 1, 10) 
print paginator.items 
+0

但是,如果我執行'分頁(Post.objects(__ raw __ = query),1,10)',它會達到相同的惰性/高效效果嗎? –

+0

是的 - 第一部分必須是可迭代的。其中一個未調用的查詢集將根據頁面和計數進行切片 - 後臺將添加一個跳過和限制。例如:'Post.objects(__ raw __ = query)[0:10]'=='Post.objects(__ raw __ = query).limit(10)' – Ross

+0

是否爲您工作 - 如果是的話請標記爲已回答並幫助其他人未來的人:) – Ross