Python 烧瓶分页在页面上返回太多结果



我使用此处找到的模块烧瓶分页:http://pythonhosted.org/Flask-paginate/

我能够返回结果,并且我的分页以正确的页数开始,但目前每页显示 69 个结果。 文档显示 per_page= ,但这只影响我的起始页码是正确的。 我为我的数据库使用 SQL-Alchemy。

@search.route('/search')
def search():
    page, per_page, offset, inner_window = get_page_items()
    links = Item.query.all()
    total = Item.query.count()
    pagination = get_pagination(page=page,
                            per_page=per_page,

                            total = total,        
                            format_total=True,  
                            format_number=True,  
                            record_name='links',
                            )
    return render_template('search/searchPage.html', offset=offset, total=total, links=links, pagination=pagination, per_page=per_page, page=page)
def get_css_framework():
    return 'bootstrap3'
def get_link_size():
    return 'sm'  #option lg
def show_single_page_or_not():
    return False
def get_page_items():
    page = int(request.args.get('page', 1))
    per_page = 10
    inner_window=10
    offset = (page) * 10
    return page, per_page, offset, inner_window

def get_pagination(**kwargs):
    kwargs.setdefault('record_name', 'repositories')
    return Pagination(css_framework=get_css_framework(),
                      link_size=get_link_size(),
                      show_single_page=show_single_page_or_not(),
                      **kwargs
                      )

如果您打印出page,您可能会看到它总是返回1,因为您尝试访问其范围之外的request,搜索路由函数和.get()总是返回1

试试这样的事情...

@search.route('/search')
    def search():
        ...
        page = int(request.args.get('page', 1))
        per_page = 10
        inner_window = 10
        offset = page * 10
        ...

如果要继续使用单独的函数,则需要将request对象传递给它才能访问值。

希望这有帮助!

我能够通过 Flask-Sqlalchemy 从数据库查询的Flask-Paginate切换到仅 SQLALchemy 来解决此问题。

我更改了它以返回每页所需的结果。

links = Item.query.paginate(page, 10, True)

更多信息在这里(SQLAlchemy and paging)和'Flask-SqlAlchemy docs'上。

我看到你选择使用Flask-SQLAlchemy,但希望这个答案能帮助其他人:

你几乎在那里 - 你正确地捕获了页面、per_page和偏移量(实际上有一个内置的,你可以使用 from flask_paginate import get_page_args 导入),但你还需要在查询上使用per_page和偏移量。所以在你的例子中:

all_links = Item.query.all()
links_for_render_template = Item.query.limit(per_page).offset(offset)

这里也是一个完整的示例:

from flask_paginate import Pagination, get_page_args
@search.route('/search')
def search():
    page, per_page, offset = get_page_args()
    all_links = Item.query.all()
    links_for_render_template = Item.query.limit(per_page).offset(offset)
    pagination = get_pagination(page=page, per_page=per_page, offset=offset, total=all_links.count(), record_name='links')
    return render_template('search/searchPage.html', links=links_for_render_template, pagination=pagination)

最新更新