Django:如何合并列表和查询集,将它们分页并在模板中遍历它们?

时间:2019-03-23 04:48:54

标签: django list templates pagination django-queryset

我正在结束排行榜。我目前返回给定类别的前100名领导者。我需要将当前排名附加到结果中。

起初,我尝试了模板中的forloop.counter变量,但是由于一次只能将10个结果分页,因此每个新页面都会重置计数器。

    def leaderboard(request):
        stats = Leaderboard.objects.all().order_by('-most_hits')[:100]
        rank = list(range(1, 101))
        paginator = Paginator(stats, 10)
        page = request.GET.get('page')
        results = paginator.get_page(page)
        context = {'results': results, 'rank': rank}

当前在第2,3页等上返回错误的排名

1 个答案:

答案 0 :(得分:0)

答案并不难:我只是使用zip来组合列表和查询集。对于分页,我只是对查询集重复了相同的分页步骤,并使用新的变量名对查询集进行了排序。最后,我遍历了模板中的压缩变量:

    def leaderboard(request):
        stats = Leaderboard.objects.all().order_by('-most_hits')[:100]
        rank = list(range(1, 101)) 
        paginator = Paginator(stats, 10)
        page = request.GET.get('page')
        stats = paginator.get_page(page)  

        paginator2 = Paginator(rank, 10)
        page2 = request.GET.get('page')
        rank = paginator2.get_page(page2)

        rank_and_query = zip(rank, stats)
        context = {'rank_and_query': rank_and_query}
    {% for rank,stats in rank_and_query %}
        <li>{{ rank }} : {{ stats.leader }}</li>
    {% endfor %}