【问题标题】:Get current page of pagination in view and manually set count of page在视图中获取当前分页页并手动设置页数
【发布时间】:2015-03-31 17:38:46
【问题描述】:
  1. 我需要在 view.py 中手动设置分页的页数
  2. 我需要获取当前页面的数量以便在函数中处理它。 我下一个view.py:

    class VideoListView(ListView):
        template_name = "video/list.html"
        context_object_name = 'videos'
        paginate_by = 12
        request = requests.get(settings.YOUTUBE_VIDEO_COUNT_URL)
        count = simplejson.loads(request.text)['data']['totalItems']
    
        def get_queryset(self, **kwargs):
            request = requests.get(settings.YOUTUBE_VIDEO_URL)
            data_about = simplejson.loads(request.text)
            video_list = []
            for item in data_about['data']['items']:
                video_list.append(item)
            return video_list
    

页数必须是:count/paginate_by,并且在每个页面请求json都会不同。

【问题讨论】:

    标签: python django pagination


    【解决方案1】:

    Django 分页是通过 GET 存储的,所以在你的 ListView 中你需要访问:

    # This will assume, if no page selected, it is on the first page
    actual_page = request.GET.get('page', 1)
    if actual_page:
        print actual_page
    

    所以在您的列表视图代码中,取决于您需要它的位置,但如果您在 get_queryset 函数中需要它,您可以使用 访问 request自我

    class VideoListView(ListView):
        # ..... your fields
    
        def get_queryset(self, **kwargs):
            # ... Your code ...
            actual_page = self.request.GET.get('page', 1)
            if actual_page:
                print actual_page
            # ... Your code ...
    

    使用 Django Pagination 自定义分页对象:

    from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
    
    def CreatePagination(request, obj_list):
        # Create the pagination
        RESULTS_PER_PAGE = 10
        paginator = Paginator(obj_list, RESULTS_PER_PAGE)
        page = request.GET.get('page')  # Actual page
        try:
            page_list = paginator.page(page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            page_list = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            page_list = paginator.page(paginator.num_pages)
    
        return page_list
    

    要使用这个CreatePagination 函数,您需要将请求和对象列表传递给它。请求用于获取实际页面,对象列表用于生成分页。

    此函数将返回一个您可以在模板中管理的分页,就像您管理从ListView 自动生成的分页一样

    【讨论】:

    • 谢谢,我可以手动设置分页的页数吗?
    • 如果你想自定义分页,我建议你检查Django Pagination,因为它更可定制,你可以传递一个QuerySet,它会创建一个自定义分页,但是是的,你可以改变python代码中的实际页面。我将在我的答案中使用 Django Pagination 添加自定义分页
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2011-05-05
    • 2015-04-04
    • 2015-11-11
    相关资源
    最近更新 更多