【发布时间】:2018-01-24 18:27:05
【问题描述】:
我刚开始使用 Django,所以我有很多问题。我已经构建了一个 Mixin 来为 GCBV (ListView) 中的“下一页”和上一页创建分页器模板链接:
class PageLinksMixin:
page_kwarg = 'page'
def _page_urls(self, page_number):
return "?{pkw}={n}".format(pkw=self.page_kwarg, n=page_number)
def previous_page(self, page):
if page.has_previous():
return self._page_urls(page.previous_page_number())
return None
def next_page(self, page):
if page.has_next():
return self._page_urls(page.next_page_number())
return None
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
page = context.get('page_obj')
if page is not None:
context.update({'previous_page_url': self.previous_page(page),
'next_page_url': self.next_page(page)})
return context
似乎一切正常。但我根本看不到函数的某些输入是在哪里创建的。尤其是“page”、“page_number”。 对于 CBV,有必要声明:
page = paginator.page(page_number)
但在 GCBV 中,这显然是不必要的,这意味着该属性是在某处创建的,然后会被继承。 对于 ListView 有一个函数 def paginate_queryset 但在那里页面仅在本地范围而不是全局范围中声明。有人可以向我解释一下吗?我真的很困惑,现在想弄清楚这一点。
这是视图:
class TagList(PageLinksMixin, ListView):
template_name = 'organizer/tag_list.html'
paginate_by = 5
model = Tag
【问题讨论】:
标签: django django-views