Flask mongoengine 分页

Posted

技术标签:

【中文标题】Flask mongoengine 分页【英文标题】:Flask mongoengine pagination 【发布时间】: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

【问题讨论】:

你的模板代码是什么?可以分享一下吗? 【参考方案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>

documentation 和github 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 版本

以上是关于Flask mongoengine 分页的主要内容,如果未能解决你的问题,请参考以下文章

python-flask 框架使用 flask_mongoengine

使用 Flask 和 MongoEngine 跟踪 Tumblelog 应用程序时出错

使用 Flask 和 MongoEngine 开发 Tumblelog 应用程序时出错

pip install flask-mongoengine报错

带有 mongoengine 的 Flask 应用程序的 Elastic Beanstalk WSGI 部署的“您尚未定义默认连接”

ImportError:没有名为 rest_framework_mongoengine 的模块