2013-04-04 73 views
8

我有一個小瓶的應用這使得博客文章:瓶mongoengine分頁

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

什麼是你的溫度後期代碼?你可以分享嗎? – codegeek 2013-04-04 23:50:07

回答

8

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 %} 
+0

更新了github鏈接以反映最新的燒瓶 - mongoengine發佈 – 2013-05-09 13:12:57