烧瓶分页示例不会丢失" iter_pages"

时间:2014-08-01 12:34:30

标签: python pagination flask sqlalchemy

我正在开发一个小型网络应用程序来查看一些日志文件。但是 我向数据库发出的查询用来变得非常大。

我希望在此示例pagination之后实现一些分页。 我将该类放入一个文件中,该文件将在Flask视图中加载。接下来我实施了 我的分页视图是这样的:

@app.route('/index/', defaults={'page':1})
@app.route('/index/page/<int:page>')
def index(page):
    count = db_session.execute("select host,facility,level,msg from messages").rowcount
    tblqry = db_session.execute("select host,facility,level,msg from messages").fetchmany(size=1000)
    if not tblqry and page != 1:
        abort(404)
    pagination = Pagination(page, PER_PAGE, count)
    return render_template('index.html', pagination=pagination, tblqry=tblqry)

之后我用宏示例中的宏内容创建了一个名为_pagination_helper.html的宏文件。然后我用:

导入了pagination_helper宏
{% from "_pagination_helper.html" import render_pagination %}

但是当我尝试做这样的事情时:

{{ render_pagination(host[0]) }}

烧瓶声称:

UndefinedError: 'str object' has no attribute 'iter_pages'

那么为什么flask无法找到'iter_pages',因为我在视图文件中包含了分页类?

此外,我还不确定将URL生成助手放在何处。

修改 : 这就是我的pagination_helper的样子:

{% macro render_pagination(pagination) %}
  <div class=pagination>
  {% for page in pagination.iter_pages() %}
    {% if page %}
      {% if page != pagination.page %}
        <a href="{{ url_for_other_page(page) }}">{{ page }}</a>
      {% else %}
        <strong>{{ page }}</strong>
      {% endif %}
    {% else %}
      <span class=ellipsis>…</span>
    {% endif %}
  {%- endfor %}
  {% if pagination.has_next %}
    <a href="{{ url_for_other_page(pagination.page + 1)}}">Next &raquo;</a>
  {% endif %}
  </div>
{% endmacro %}

1 个答案:

答案 0 :(得分:3)

您需要将Pagination对象传递给宏,而不是字符串。 host[0]是一个字符串,而不是您在视图函数中创建的pagination值。

使用:

{{ render_pagination(pagination) }}