2016-01-10 1 views
1

La pagination dans cette vue générique simple dans Django fonctionne, mais chaque page affiche toutes les lignes, et non les lignes de cette page. Comment puis-je sélectionner les seuls enregistrements nécessaires pour une page donnée?Les pages affichent toutes les lignes lors de l'utilisation de get_context_Data pour paginate_by dans ListView

class ArticleList(ListView): 
    """Get all articles""" 
    model = Article 
    template_name = "blog/articles.html" 
    paginate_by = 4 

    def get_context_data(self, **kwargs): 
     context = super(ArticleList, self).get_context_data(**kwargs) 
     context['articles'] = Article.objects.select_related().all() 

     return context 

Répondre

2

Parce que vous avez remplacée l'objet articles dans get_context_data de retourner tout. L'implémentation par défaut effectue la pagination ici, mais vous l'avez remplacée par votre jeu de requête non paginé.

Au lieu de cela, définissez get_queryset et ajoutez le select_related là.

1

Voilà comment j'ai fini par résoudre tout d'abord:

class ArticleList(ListView): 
"""Get all articles""" 
model = Article 
template_name = "blog/articles.html" 
paginate_by = 1 

def get_context_data(self, **kwargs): 
    context = super(ArticleList, self).get_context_data(**kwargs) 
    p = Paginator(Article.objects.select_related().all(), self.paginate_by) 
    context['articles'] = p.page(context['page_obj'].number) 

    return context 

Cependant, après la meilleure aide everyones est: il

class ArticleList(ListView): 
"""Get all articles""" 
model = Article 
template_name = "blog/articles.html" 
paginate_by = 1 
context_object_name = "articles" 

def get_queryset(self): 
    return Article.objects.all().order_by('-date') 

Merci à tous.

+0

S'il vous plaît, vérifiez la réponse de daniel-roseman, aussi cela peut aider https://docs.djangoproject.com/fr/1.9/topics/class-based-views/generic-display/ – jorlugaqui

+0

Merci, 'context_object_name' semble utile – duFF