urls.py:
urlpatterns = [ url(r'^page/(?P<num_page>\d+)/$', view.ArticlesMain.as_view(), name="articles_main"), url(r'^$', view.ArticlesMain.as_view(), name="articles_main"), ]
View.py:
class ArticlesMain(ListView): template_name = "articles_main.html" model = Article paginate_by = 1 page_kwarg = "num_page" context_object_name = "articles" def get_context_data(self, **kwargs): context = super(ArticlesMain, self).get_context_data(**kwargs) articles = Article.objects.all() paginator = Paginator(articles, self.paginate_by) try: page_num = self.request.GET.get("num_page") except KeyError: page_num = 1 try: articles_page = paginator.page(page_num) except InvalidPage: articles_page = paginator.page(1) #pages - переменная, которая передается в шаблон и формирует вид переключателя страниц pages = [] curr_page = articles_page.number range_page = paginator.page_range number_pages = paginator.num_pages if number_pages >= 10 and curr_page >= 10: if curr_page >= range_page[-4]: pages.append(range_page[0]) pages.append('points') [pages.append(i) for i in range(range_page[-1] - 5, range_page[-1] + 1)] else: pages.append(range_page[0]) pages.append('points') [pages.append(i) for i in range(curr_page - 3, curr_page + 4)] pages.append('points') pages.append(range_page[-1]) if number_pages >= 10 > curr_page: [pages.append(i) for i in range(1, 11)] if number_pages != 11: pages.append('points') pages.append(range_page[-1]) if number_pages < 10 and curr_page < 10: [pages.append(i) for i in range_page] context["articles"] = articles context["articles_page"] = articles_page context["pages"] = pages return context