在 Flask 的分页中找不到“items”属性

问题描述 投票:0回答:1

我对 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']
python flask pagination flask-sqlalchemy
1个回答
0
投票

(这个答案适用于 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

之类的内容自行增加页数
© www.soinside.com 2019 - 2024. All rights reserved.