2010-06-04 4 views
2

J'ai une application de microblog, et j'essaie de paginer les entrées, pour montrer seulement 10 par page, par exemple. bien que j'ai suivi le tutoriel, ma pagination ne semble pas fonctionner.problème de pagination de base django

la fonction annonce ressemble à ce que:

def listing(request): 
    blog_list = Blog.objects.all() 
    paginator = Paginator(blog_list, 10) 
    try: 
     page = int(request.GET.get('page','1')) 
    except ValueError: 
     page = 1 
    try: 
     posts = paginator.page(page) 
    except (EmptyPage, InvalidPage): 
     posts = paginator.page(paginator.num_pages) 

    return render_to_response('profile/publicProfile.html', {"posts": posts}) 

et dans mon modèle:

<div class="pagination"> 
<span class="step-links"> 
    {% if posts.has_previous %} 
     <a href="?page={{ posts.previous_page_number }}">previous</a> 
    {% endif %} 

    <span class="current"> 
     Page {{ posts.number }} of {{ posts.paginator.num_pages }}. 
    </span> 

    {% if object.has_next %} 
     <a href="?page={{ posts.next_page_number }}">next</a> 
    {% endif %} 
</span> 

merci!

+0

Qu'est-ce qui ne va pas? Avez-vous une erreur? – muksie

+0

... à part le fait que vous n'affichez pas les messages n'importe où dans le modèle. –

+0

non, c'était juste la 'partie coupable du modèle', pas tout le modèle. – dana

Répondre

6

Vous pouvez utiliser django-pagination qui permet de mettre en œuvre la pagination sans écrire une seule ligne de code Python, vous passez seulement la liste de tous objets à modèle (par exemple blog_list = Blog.objects.all() dans votre cas), puis utilisez trois balises dans votre modèle:

{% load pagination_tags %} 
{% autopaginate blog_list 10 %} 
{% paginate %} 
+0

Eh bien, ça sonne bien, et le tutoriel est vraiment sympa, mais où puis-je obtenir le middleware de pagination? Mon erreur est: erreur middleware importation pagination.middleware: "Aucun module nommé pagination.middleware" – dana

+4

Vous devez l'ajouter à setting.py, MIDDLEWARE_CLASSES comme ceci: MIDDLEWARE_CLASSES = ( 'pagination.middleware.PaginationMiddleware', En d'autres termes, il est dans le dossier de pagination, middleware.py fichier –

+1

+ 1 pour utiliser django-pagination :) – eos87

5

Retourner la object_list vue générique qui prend l'argument paginate_by, plutôt que de retourner le render_to_response