基于类的基于Django的视图
问题描述:
我想分页我的基于类的视图。这是我的观点的外观:基于类的基于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
这里是我的模型的某些方面的例子:
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 '#'.")
...
当然,按照Django文档,定义视图时分页系统的工作原理通过这样的事情:def view(request):
我也想知道如何可以拉出下一个和以前的对象。
我需要一个链接到“下一期(与名称和问题编号的上下文)”,然后是“上一期”链接。请注意,仅仅更改问题的下一个或前一个号码的模板链接是行不通的。
所以,如果任何人都可以帮助我,那就太好了。
答
只需将paginate_by = 20
添加到您查看课程。
class IssuesByTitleView(ListView):
context_object_name = "issue_list"
paginate_by = 20
#More stuff here..
答
就像埃文波特曾评论,你可以使用page_obj
上下文变量的访问number, paginatior.num_pages, has_next, has_previous
。这是刚刚从KeyError['page']
救了我后,从Django 1.4.1升级到1.7,object_list to ListView
这工作,但我怎么现在通过它的模板?例如:{{issue.paginator.num_pages}}的{Page {{issue.number}}。 {%if issue.has_previous%} « Previous {%endif%} {%if issues.has_next%} | Next » {%endif%}'不起作用。 – AAA 2011-05-16 15:00:13
“page_obj”上下文变量将具有您需要的信息。即{{page_obj.paginator.num_pages}}',page_obj.has_previous'的页面{{page_obj.number}}。还有'is_paginated'上下文变量来检查是否有分页。 – 2011-05-16 17:00:10
是的,这是回答这个问题时的关键丢失细节;) – defbyte 2012-04-20 17:52:40