Получить номер текущей страницы в ListView - PullRequest
0 голосов
/ 26 октября 2018

Как получить информацию о Paginator в представлении на основе классов? Я хочу вызвать функцию из get_context_data, и мне нужно передать текущую страницу и последнюю страницу.

views.py:

from django.views.generic import ListView
from django.core.paginator import Paginator
from .utils import pageList

class PeopleView(ListView):
    model = People
    paginate_by = 5
    context_object_name = 'people'

    def get_context_date(self, *args, **kwargs):
        context = super(People, self).get_context_data(*args, **kwargs)
        context['page-list'] = pageList(<current_page>, <last_page>)
        return context

1 Ответ

0 голосов
/ 26 октября 2018

Этот фрагмент кода взят из исходного кода django views/generic/list.py:

def get_context_data(self, *, object_list=None, **kwargs):
    """Get the context for this view."""
    queryset = object_list if object_list is not None else self.object_list
    page_size = self.get_paginate_by(queryset)
    context_object_name = self.get_context_object_name(queryset)
    if page_size:
        paginator, page, queryset, is_paginated = self.paginate_queryset(queryset, page_size)
        context = {
            'paginator': paginator,  #<--- (1)
            'page_obj': page,        #<--- (2)
            'is_paginated': is_paginated,
            'object_list': queryset
        }
    else:
        context = {
             ....
        }
    if context_object_name is not None:
        context[context_object_name] = queryset
    context.update(kwargs)
    return super().get_context_data(**context)

Это означает, что в вашем context page_obj и paginator естьДоступные.Вы можете написать выражение как:

{{ page_obj.previous_page_number }}  (2)

или

{{ paginator.num_pages }}    (1)

Также вы можете написать:

def get_context_date(self, *args, **kwargs):
    context = super().get_context_data(*args, **kwargs)
    my_function(  )  
    context['page-list'] = pageList(context['page_obj'].number, 
                                    context['paginator'].num_pages)
    return context
...