【问题标题】:Flask mongoengine paginationFlask mongoengine 分页
【发布时间】:2013-03-27 05:06:20
【问题描述】:

我有一个小的 Flask 应用程序,它可以呈现博客文章:

views.py:

class ListView(MethodView):

    def get(self, page=1):
        posts = Post.objects.all()
        return render_template('posts/list.html', posts=posts)

这一切都很好,但我想为posts 对象添加分页。查看project docs,我看到有一个分页类。

所以我尝试了这个:

class ListView(MethodView):

    def get(self, page=1):
        posts = Post.objects.paginate(page=page, per_page=10)
        return render_template('posts/list.html', posts=posts)

但现在我得到一个错误:

TypeError: 'Pagination' object is not iterable

那么如何在模板中遍历我的posts

【问题讨论】:

  • 你的模板代码是什么?可以分享一下吗?

标签: python mongodb flask mongoengine


【解决方案1】:

Pagination 对象有一个 items list,它将包含 mongoengine 文档对象(在您的情况下为 Post 对象)。可以迭代此列表以显示文档。

例如,在您的模板中:

{% for post in posts.items %}
    {{ post.title }}
    {{ post.content }}
{% endfor %}

要获取分页链接的实际页码,请使用iter_pages()

<div id="pagination-links">
    {% for page in posts.iter_pages() %}
        {{ page }}
    {% endfor %}
</div>

documentationgithub link above 都有一个更好的分页链接示例:

{% macro render_pagination(pagination, endpoint) %}
    <div class=pagination>
        {%- for page in pagination.iter_pages() %}
            {% if page %}
                {% if page != pagination.page %}
                    <a href="{{ url_for(endpoint, page=page) }}">{{ page }}</a>
                {% else %}
                    <strong>{{ page }}</strong>
                {% endif %}
            {% else %}
                <span class=ellipsis>…</span>
            {% endif %}
        {%- endfor %}
    </div>
{% endmacro %}

【讨论】:

  • 更新了 github 链接以反映最新的 flask-mongoengine 版本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 2016-08-01
  • 2013-11-26
  • 2014-08-16
  • 1970-01-01
相关资源
最近更新 更多