烧瓶mongoengine分页

Dar*_*ech 8 python mongodb mongoengine flask

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

views.py:

class ListView(MethodView):

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

这一切都很好,但我想为posts对象添加分页.看一下项目文档,我看到有一个分页类.

所以我尝试了这个:

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)
Run Code Online (Sandbox Code Playgroud)

但现在我收到一个错误:

TypeError: 'Pagination' object is not iterable
Run Code Online (Sandbox Code Playgroud)

那么如何posts在模板中迭代我?

任何帮助非常感谢.

boo*_*dev 9

Pagination对象有一个items列表,其中包含mongoengine文档对象(在您的情况下是Post对象).可以迭代此列表以显示文档.

例如,在您的模板中:

{% for post in posts.items %}
    {{ post.title }}
    {{ post.content }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

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

上面文档github链接都有一个更好的分页链接示例:

{% 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 %}
Run Code Online (Sandbox Code Playgroud)