2013-04-04 16 views
8

Ho una piccola applicazione Flask che rende i post del blog:Flask mongoengine impaginazione

views.py:

class ListView(MethodView): 

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

Questo è tutto buono, ma vorrei aggiungere impaginazione all'oggetto posts . Guardando lo project docs, vedo che c'è una classe di impaginazione.

Così ho provato questo:

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) 

Ma ora ho un errore:

TypeError: 'Pagination' object is not iterable 

Allora, come faccio scorrere il mio posts nel modello?

Qualsiasi aiuto molto apprezzato.

+1

Qual è il tuo temp codice in ritardo? Puoi condividere? – codegeek

risposta

8

L'oggetto Pagination ha un items list che conterrà gli oggetti documento mongoengine (nel tuo caso gli oggetti Post). Questo elenco può essere iterato per visualizzare i documenti.

Ad esempio, nel modello:

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

per ottenere i numeri di pagina effettivi per link di paginazione, utilizzare iter_pages():

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

Sia il documentation e la github link above, hanno un esempio migliore per link di paginazione:

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

link github aggiornati per riflettere l'ultima versione di flask-mongoengine –