如何在Django模板中显示多个视图?

b3a*_*ast 5 python django django-templates django-views

我想在模板中显示以下两个视图index.html.

class IndexView(generic.ListView):

    template_name = 'items/index.html'
    context_object_name = 'popular_items_list'

    def get_queryset(self):
        return Item.objects.order_by('-rating')[:5]

class tryView(generic.ListView):

    template_name = 'items/index.html'
    context_object_name = 'latest_items_list'

    def get_queryset(self):
        return Item.objects.order_by('pub_date')[:5]
Run Code Online (Sandbox Code Playgroud)

有没有办法将这两个视图合并为一个视图?

我该如何显示两个查询集index.html

是否可以Item.objects.all()在模板中发送所有和过滤器?

Gly*_*son 5

这里有几个问题,让我先回答一下.

您可以get_context_data在一个视图中覆盖并添加模板的上下文以获取更多项目.例如...

class IndexView(generic.ListView):
   template_name = 'items/index.html'
   context_object_name = 'popular_items_list'

   def get_queryset(self):
     return Item.objects.order_by('-rating')[:5]

   def get_context_data(self, *args, **kwargs):
       context = super(IndexView, self).get_context_data(*args, **kwargs)
       context['moreItems'] = Item.objects.order_by('pub_date')[:5]
       return context 
Run Code Online (Sandbox Code Playgroud)

这样,您可以根据需要在页面/模板上包含多个查询集.在此示例moreItems中,您的模板中将提供该示例popular_items_list

关于第二个问题,是的,您可以传入URL参数并使用它们来过滤查询集.我建议阅读这个.