我使用Flask-SQLAlchemy的paginate()
。现在我需要找到特定评论ID的页面。
例如,如果我在同一页面中有所有评论,这将有效:
new_dict['url'] = '/comments#comment_' + str(comment.id)
但在我的情况下,我需要这种结构:
/comments?page=1#comment_73
如何找到页面是什么?
答案 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。