alioguzhan
alioguzhan

Reputation: 7917

django - 2 views in one template

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

Answers (2)

Staccato
Staccato

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

schacki
schacki

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

Related Questions