django - 一个模板中的2个视图

时间:2012-08-20 23:42:07

标签: django-views

我有2个不同的视图,它们从db获取过滤数据。我必须在一个模板文件(admin.html)中使用这些视图,但我不能同时在页面上使用多个视图。

这是我的观点1:

draft_list = Post.objects.filter(isdraft=True).order_by("-posted")
            return render_to_response('userside/admin.html',
                     {'draft_list':draft_list,},
                     context_instance = RequestContext(request))

view2:

publish_list = Post.objects.filter(isdraft=False).order_by("-posted")
            return render_to_response('userside/admin.html',
                {'publish_list':publish_list,},
                context_instance = RequestContext(request))

我想像他们一样使用它们:

{% for d in draft_list %}
{{ d.title }}
{% endfor %}

--

{% for p in publish_list %}
{{ p.title }}
{% endfor %}

我想让这两个观点“一个观点”。正确的方法是什么?

2 个答案:

答案 0 :(得分:13)

您不希望在1个模板中有2个视图(无论如何都不可能),但在1个模板中有2个模型可用于渲染。就这样做:

draft_list = Post.objects.filter(isdraft=True).order_by("-posted")
publish_list = Post.objects.filter(isdraft=False).order_by("-posted")
return render_to_response('userside/admin.html',
                 {'draft_list':draft_list,'publish_list':publish_list})

答案 1 :(得分:0)

从您的问题来看,您似乎正在使用基于功能的视图。解决您遇到的问题的另一种方法是使用基于类的视图并覆盖get_context_data方法以将模板传递给两个上下文,每个查询集对应一个上下文。

#views.py
class MyClassBasedView(DetailView):
    context_object_name = 'draft_list'
    template='my-template'
    queryset = Post.objects.filter(isdraft=True).order_by("-posted")

    def get_context_data(self, **kwargs):
       context = super(MyClassBasedView, self).get_context_data(**kwargs)
       context['publish_list'] = Post.objects.filter(isdraft=False).order_by("-posted")
       return context