8

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

视图.py:

class ListView(MethodView):

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

这一切都很好,但我想为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)

但现在我得到一个错误:

TypeError: 'Pagination' object is not iterable

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

4

1 回答 1

9

Pagination对象有一个items列表,其中将包含 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>

上面的文档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>…&lt;/span>
            {% endif %}
        {%- endfor %}
    </div>
{% endmacro %}
于 2013-04-10T10:20:42.173 回答