Estoy intentando paginar mi vista basada en clases. Aquí es cómo mi vista se ve:Vista basada en clases de Paginate en Django
class IssuesByTitleView(ListView):
context_object_name = "issue_list"
def issues(request):
issue_list = Issue.objects.all()
###### Commented out does not work ######
# paginator = Paginator(issue_list, 24)
# try:
# page = int(request.GET.get('page', '1'))
# except ValueError:
# page = 1
# try:
# issues = paginator.page(page)
# except (EmptyPage, InvalidPage):
# issues = paginator.page(paginator.num_pages)
def get_queryset(self):
self.title = get_object_or_404(Title, slug=self.kwargs['title_slug'])
return Issue.objects.filter(title=self.title).order_by('-number')
def get_context_data(self, **kwargs):
context = super(IssuesByTitleView, self).get_context_data(**kwargs)
context['title'] = self.title
return context
aquí es una muestra de mis modelos para algún contexto:
class Title(models.Model):
CATEGORY_CHOICES = (
('Ongoing', 'Ongoing'),
('Ongoing - Canceled', 'Ongoing - Canceled'),
('Limited Series', 'Limited Series'),
('One-shot', 'One-shot'),
('Other', 'Other'),
)
title = models.CharField(max_length=64)
vol = models.IntegerField(blank=True, null=True, max_length=3)
year = models.CharField(blank=True, null=True, max_length=20, help_text="Ex) 1980 - present, 1980 - 1989.")
category = models.CharField(max_length=30, choices=CATEGORY_CHOICES)
is_current = models.BooleanField(help_text="Check if the title is being published where Emma makes regular appearances.")
slug = models.SlugField()
class Meta:
ordering = ['title']
def get_absolute_url(self):
return "/titles/%s" % self.slug
def __unicode__(self):
class Issue(models.Model):
title = models.ForeignKey(Title)
number = models.CharField(max_length=20, help_text="Do not include the '#'.")
...
Por supuesto, siguiendo la documentación de Django, el sistema de paginación funciona cuando se define la vista por algo como esto: def view(request):
También me pregunto cómo puedo sacar los objetos siguientes y anteriores.
Necesitaría un enlace al "próximo problema (con el contexto del nombre y el número de problema)" y luego un enlace de "problema anterior". Tenga en cuenta que simplemente cambiar el enlace de la plantilla con el número siguiente o anterior del problema no va a funcionar.
Entonces, si alguien puede ayudarme, sería genial.
Esto funciona, pero ¿cómo puedo pasarlo a través de la plantilla ahora? Por ejemplo: 'Página {{issue.number}} de {{issue.paginator.num_pages}}. {% if issue.has_previous%} « Previous {% endif%} {% if issues.has_next%} | Next » {% endif%} 'no funciona .. – AAA
La variable de contexto' page_obj' tendrá la información que necesita. Es decir 'la página {{page_obj.number}} de {{page_obj.paginator.num_pages}}', 'page_obj.has_previous'. También existe la variable de contexto 'is_paginated' para verificar si hay paginación o no. –
Sí, esa es una clave que falta al responder esta pregunta;) – defbyte