在TemplateView中进行Django分页?

时间:2019-02-20 19:54:48

标签: django django-models django-views

TemplateView中的Django分页?

您好,我试图弄清楚如何在类视图中访问多个模型并同时进行分页。

阅读后的我的结局,DjangoDoc和Stackoverflow:

ListView-我可以只使用paginate_by=,但只能加载一个模型。

TemplateView-我可以加载许多模型,但不能使用paginate_by=

例如,三个模型:ChickenCowsCats(我想在页面上显示每个模型的最后3个条目)。所有模型都有一个模型字段,称为输入日期。

class HomeIndex(TemplateView):
   template_name = 'home.html'
   paginate_by = 3 # --- something like that

   def get_context_data(self, **kwargs):
      context = super(HomeIndex, self).get_context_data(**kwargs)
      context['chickens'] = Chicken.objects.order_by('-entry_date'')
      context['cows'] = Cows.objects.order_by('-entry_date'')
      context['cats'] = Cats.objects.order_by('-entry_date')

      return context

或者我可以在objects.order_by('-entry_date', < pagination? >)中添加一些内容。

谢谢

2 个答案:

答案 0 :(得分:1)

如果您想使用ListView,则仍然可以通过在get_queryset(self)中链接查询集并对其进行分页(阅读this answer来查看chain和{{1} }解释)。这样,您可以使用默认的简单分页。

sorted

然后在您的模板中:

from itertools import chain
from operator import attrgetter

class HomeIndex(ListView):
    template_name = 'home.html'
    paginate_by = 3 # --- somehting like that

    def get_queryset(self):
        chicken_list = Chicken.objects.all()
        cow_list = Cows.objects.all()
        cat_list = Cats.objects.all()

        result_list = sorted(
            chain(chicken_list, cow_list, cat_list),
            key=attrgetter('entry_date'),
            reverse=True)

        return result_list

您可以使用here所示的分页。

答案 1 :(得分:1)

Django QuerySet具有内置的结果切片。

 Cows.objects.order_by('-entry_date'')[offset:limit]

对于最后3个条目,偏移量为0,限制为3

 Cows.objects.order_by('-entry_date'')[0:3]

或者可以用更Python化的方式编写

 Cows.objects.order_by('-entry_date'')[:3]

要获取最后3头牛,猫和鸡,可以使用以下代码。

def get_context_data(self, **kwargs):
    context = super(HomeIndex, self).get_context_data(**kwargs)
    context['chickens'] = Chicken.objects.order_by('-entry_date')[:3]
    context['cows'] = Cows.objects.order_by('-entry_date')[:3]
    context['cats'] = Cats.objects.order_by('-entry_date')[:3]


    return context

参考文献: