Reputation: 7917
i have 2 different views which are getting filtered data from db. and i have to use these views in one template file(admin.html) but i cant use multiple views on a page at same time.
here is my view1:
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))
i d like to use them like :
{% for d in draft_list %}
{{ d.title }}
{% endfor %}
--
{% for p in publish_list %}
{{ p.title }}
{% endfor %}
i want to make these 2 views 'one view' .what is the correct way?
Upvotes: 9
Views: 10082
Reputation: 633
From your question, it seems that you're using function based views. An alternative way to solve the problem you're having is to use class based views and override the get_context_data method to pass your template two contexts, one for each queryset.
#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
Upvotes: 7
Reputation: 9533
You do not want to have 2 views in 1 template (which is not possible anyway), but have 2 models available in 1 template for rendering. Just do it like this:
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})
Upvotes: 19