Django Pass Multiple Models to one Template
I ended up modifying @thikonom 's answer to use class-based views:
class IndexView(ListView): context_object_name = 'home_list' template_name = 'contacts/index.html' queryset = Individual.objects.all() def get_context_data(self, **kwargs): context = super(IndexView, self).get_context_data(**kwargs) context['roles'] = Role.objects.all() context['venue_list'] = Venue.objects.all() context['festival_list'] = Festival.objects.all() # And so on for more models return context
and in my urls.py
url(r'^$', IndexView.as_view(), name="home_list" ),
I suggest you remove your object_list
view,
define a dictionary for this specific view,
all_models_dict = { "template_name": "contacts/index.html", "queryset": Individual.objects.all(), "extra_context" : {"role_list" : Role.objects.all(), "venue_list": Venue.objects.all(), #and so on for all the desired models... } }
and then in your urls:
#add this import to the top from django.views.generic import list_detail(r'^$', list_detail.object_list, all_models_dict),
If you want to build it on Django 1.5 you will be able to utilize stable version of CBVs. Please find code below.
Great doc you can find here https://docs.djangoproject.com/en/dev/topics/class-based-views/mixins/
class ProductsCategoryList(ListView): context_object_name = 'products_list' template_name = 'gallery/index_newborn.html' def get_queryset(self): self.category = get_object_or_404(Category, name=self.args[0]) return Products.objects.filter(category=self.category) def get_context_data(self, **kwargs): kwargs['category'] = Category.objects.all() # And so on for more models return super(ProductsCategoryList, self).get_context_data(**kwargs)