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 部署的“您尚未定义默认连接”