Django Pass Multiple Models to one Template

前端 未结 3 965
庸人自扰
庸人自扰 2020-11-30 18:20

I am building an address book that includes the relationships between entries, etc. I have separate models for Individuals, Companies, Venues, and Roles. On my index page I

相关标签:
3条回答
  • 2020-11-30 18:44

    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)
    
    0 讨论(0)
  • 2020-11-30 18:45

    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),
    
    0 讨论(0)
  • 2020-11-30 18:47

    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"
            ),
    
    0 讨论(0)
提交回复
热议问题