2013-04-04 15 views
8

Mam małą aplikację Flask który renderuje blogach:Kolba mongoengine paginacja

views.py:

class ListView(MethodView): 

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

To wszystko jest dobre, ale chciałbym dodać paginacji do obiektu posts . Patrząc na project docs widzę, że istnieje klasa stronicowania.

Więc próbowałem to:

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) 

Ale teraz pojawia się błąd:

TypeError: 'Pagination' object is not iterable 

Więc jak mam iterację mój posts w szablonie?

Każda pomoc bardzo ceniona.

+1

Jaka jest Twoja temperatura późny kod? Możesz udostępnic ? – codegeek

Odpowiedz

8

Obiekt Pagination ma obiekt items list, który będzie zawierał obiekty dokumentów mongoenguny (w twoim przypadku obiekty Post). Ta lista może być iterowana, aby wyświetlić dokumenty.

Na przykład w szablonie:

{% for post in posts.items %} 
    {{ post.title }} 
    {{ post.content }} 
{% endfor %} 

Aby uzyskać aktualne numery stron dla linków paginacji, użyj iter_pages():

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

Zarówno documentation i github link above, mają lepszy przykład dla numeracja stron:

{% 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

zaktualizowane linki do github odzwierciedlają najnowsze wydanie flagono-mongoengine –