일반 보기 페이지 나누기 기능

3196 단어
django 페이지에 대해 인터넷에서 많이 찾아보고 공식 문서(1.8)도 봤는데 이해가 안 돼서 원본 코드를 보고 유니버설 보기에서 get 를 봤어요.context_데이터(self,**kwargs) 이 방법은 원래 일반적인 보기에 페이지 기능이 포함되어 있었다
django/views/generic/list.py
class MultipleObjectMixin(ContextMixin):
    """
    A mixin for views manipulating multiple objects.
    """
    allow_empty = True
    queryset = None
    model = None
    paginate_by = None
    paginate_orphans = 0
    context_object_name = None
    paginator_class = Paginator
    page_kwarg = 'page'
    ordering = None
이 클래스는ListView의 상위 클래스입니다.
django/views/generic/list.py
    def get_context_data(self, **kwargs):
        """
        Get the context for this view.
        """
        queryset = kwargs.pop('object_list', 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,
                'page_obj': page,
                'is_paginated': is_paginated,
                'object_list': queryset
            }
        else:
            context = {
                'paginator': None,
                'page_obj': None,
                'is_paginated': False,
                'object_list': queryset
            }
        if context_object_name is not None:
            context[context_object_name] = queryset
        context.update(kwargs)
        return super(MultipleObjectMixin, self).get_context_data(**context)
이 방법은 ListView 상위 클래스의 한 방법입니다.
blog/views.py
class ArticlesView(ListView):
    template_name = 'blog/articles.html'
    context_object_name = 'articles_list'
    paginate_by = settings.PAGE_NUM #              

    def get_queryset(self,):
        cid = self.kwargs.get('cid','')
        articles_list = Article.objects.filter(category=cid).order_by('-view_times').defer('text')
        return articles_list

    def get_context_data(self,**kwargs):
        return super(ArticlesView,self).get_context_data(**kwargs)

템플릿에서 이 몇 개의 매개 변수를 수신하면 페이지 나누기 기능을 실현할 수 있다
            context = {
                'paginator': paginator,        
paginator 객체
                'page_obj': page,
페이지 나누기 대상(몇 페이지의 대상)
                'is_paginated': is_paginated,
이게 뭔지 모르겠어요.
                'object_list':queryset 템플릿 변수
page_obj.has_previous				#      
page_obj.has_next					#      
page_obj.has_other_pages			#          
page_obj.previous_page_number		#      
page_obj.next_page_number			#      
page_obj.start_index				# (  ...)      (limit    [1:5])
page_obj.end_index					# (  ...)      
page_obj.paginator					#  paginator  
page_obj.number						#     

paginator.count						#    
paginator.num_pages					#    
paginator.page_range				#    
{% for page in paginator.page_range %}

좋은 웹페이지 즐겨찾기