我对 Flask 和分页总体来说非常陌生。
我需要对列表进行分页,如下所示:
campaign_brief_result = [
{'id': 112233, 'name': 'DSR-335', 'description': 'Desc', 'currency': '0'},
{'id': 11223344, 'name': 'DSR-336', 'description': 'Desc2', 'currency': '2'}
]
当我运行下面的代码时,我无法找到 items 属性。如何访问此处分页的数据? 这是我正在使用的代码片段:
paginated_data = Pagination( page = 1,
per_page = 2,
total = len(campaign_brief_result),
search = False,
record_name = 'campaign_brief_result')
print(dir(paginated_data))
打印显示了“pagination_data”的以下属性:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_get_single_page_link', 'alignment', 'anchor', 'args', 'bs_version', 'bulma_style', 'css_end_fmt', 'css_framework', 'current_page_fmt', 'display_msg', 'endpoint', 'first_page', 'format_number', 'format_total', 'found', 'gap_marker_fmt', 'has_next', 'has_prev', 'href', 'info', 'init_values', 'inner_window', 'is_disabled', 'last_page', 'link', 'link_css_fmt', 'link_size', 'links', 'next_disabled_page_fmt', 'next_label', 'next_page', 'next_page_fmt', 'outer_window', 'page', 'page_href', 'page_parameter', 'pages', 'per_page', 'per_page_parameter', 'prev_disabled_page_fmt', 'prev_label', 'prev_page', 'prev_page_fmt', 'record_name', 'search', 'search_msg', 'show_single_page', 'single_page', 'skip', 'total', 'total_pages', 'url_coding']
(这个答案适用于 Flask-paginate,而不适用于通过 mongoengine 和 sqlalchemy 获得的内置分页函数)
我的理解是,您需要使用flask-paginate传入两者数据和分页器。
thisPagination = Pagination(page=page, per_page=per_page, offset=offset,
total=len(records),
record_name='records')
return render_template("scrollrrr.html",
scrollpaginate=thisPagination,
records=records)
因此,在您的模板/宏中,您将使用
records
作为项目列表,并使用 scrollpaginate
提供分页数据(例如 scrollpaginate.has_next
、scrollpaginate.page
等)
这与 mongoengine 形成对比,您的控制器函数可能会像这样调用 render_template :
theseImages = Mongo_Imgs.objects().order_by("Filename").paginate(page, current_app.config['NOTES_PER_PAGE'])
return render_template('scrollimages.html',
records=theseImages)
并且您可以使用
records
来获取数据和分页信息 - 例如在 htmx“无限滚动”宏中(再次使用 mongoengine paginate 作为此处的源),您可能会这样做:
{% macro htmx_infinite_cards(records, endpoint) -%}
{% for item in records.items -%}
{% if loop.last and records.has_next -%}
<div class="row"
hx-get="{{ url_for(endpoint, page=records.next_num) }}"
hx-trigger="revealed"
hx-swap="afterend"
>next page
{% else -%}
<div class="row">
{% endif -%}
{{ caller(item) }}
</div>
{% endfor -%}
{% endmacro -%}
关于 Flask-paginate 的进一步说明 - 我不相信它有 next_num 属性,因此您可能必须使用类似
page=scrollpaginate.page+1
之类的内容自行增加页数