在paginate()SQLAlchemy中查找特定项的页面

时间:2015-05-06 22:16:52

标签: python flask pagination sqlalchemy flask-sqlalchemy

我使用Flask-SQLAlchemy的paginate()。现在我需要找到特定评论ID的页面。

例如,如果我在同一页面中有所有评论,这将有效:

new_dict['url'] = '/comments#comment_' + str(comment.id)

但在我的情况下,我需要这种结构:

/comments?page=1#comment_73

如何找到页面是什么?

2 个答案:

答案 0 :(得分:1)

the docs开始,Pagination类包含.items.has_next属性以及我们可以使用的.next方法:

page_number = 0
search = Comment.query.get(15)
query = Comment.query.filter(Comment.id<40)
for num in range(1, query.paginate(1).pages + 1):
    if search in query.paginate(num).items:
        page_number = num
        break

page_number = 0
search = Comment.query.get(15)
pag = Comment.query.filter(Comment.id<40).paginate(1)
while pag.has_next:
    if search in pag.items:
        page_number = num
        break
    pag.next()

答案 1 :(得分:0)

据我所知,Celeo的答案行不通。例如,根据文档,pag.next()在其代码中的作用是:

返回下一页的分页对象。

因此,基本上,除非更新变量,否则它什么都不做;并且我建议您不要创建新查询,因为您已经有了comment_id,所以:

comment_id=request.args.get('comment_id')
if comment_id and comment_id.isdigit():
            comment_id = int(comment_id )
            page_number = -1
            index = 1 # page numbers are 1 indexed in Pagination Object
            while comments_pagination_object.has_next:
                for comment in comments_pagination_object.items:
                    if comment.id == comment_id :
                        page_number = index
                        break
                if page_number != -1:
                    break
                index += 1
                product_items = product_items.next()

然后,在URL中,您将得到类似的内容:

/comments?comment_id=2

product_items.next()部分正在更改PaginationObject的页面,直到其中一个项目(在本例中为class Comment类型)具有与您的请求参数相同的ID。