2013-04-04 18 views
8

Ben blog gönderileri kılan küçük Matara uygulaması vardır:Matara mongoengine sayfalandırma

views.py:

class ListView(MethodView): 

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

Bunların hepsi iyidir, ama ben posts nesneye pagination eklemek istiyorum . project docs'a baktığımda, bir sayfalama sınıfının olduğunu görüyorum.

Yani bu çalıştı:

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) 

Ama şimdi hata alıyorum: aracılığıyla ben yineleme nasıl Yani

TypeError: 'Pagination' object is not iterable 

benim şablonda posts?

Herhangi bir yardım çok takdir edilmektedir.

+1

geç kod? Paylaşabilir misin ? – codegeek

cevap

8

Pagination nesnesinde, mongoengine belge nesnelerini içeren items list vardır (sizin durumunuzda Post nesneleri). Bu liste belgeleri görüntülemek için yinelenebilir.

Örneğin, şablonunda:

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

sayfa bağlantıları için gerçek sayfa numaralarını almak kullanmak için iter_pages():

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

Hem documentation ve github link above, daha iyi bir örnek için sahip sayfa numaralandırma bağlantıları:

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

son flask-mongoengine sürümünü yansıtacak şekilde github linklerini güncelledi –