examples bootstrap django templates model views

bootstrap - Django Pass MĂșltiples Modelos a una Plantilla



django templates bootstrap (3)

Estoy construyendo una libreta de direcciones que incluye las relaciones entre las entradas, etc. Tengo modelos separados para Individuos, Empresas, Sedes y Roles. En mi página de índice me gustaría enumerar todas las instancias de cada modelo y luego filtrarlas. Para que una persona pueda buscar y encontrar fácilmente una entrada. He podido enumerar un único modelo utilizando vistas genéricas y uso get_extra_context para mostrar un modelo más:

#views.py class IndividualListView(ListView): context_object_name = "individual_list" queryset = Individual.objects.all() template_name=''contacts/individuals/individual_list.html'' class IndividualDetailView(DetailView): context_object_name = ''individual_detail'' queryset = Individual.objects.all() template_name=''contacts/individuals/individual_details.html'' def get_context_data(self, **kwargs): context = super(IndividualDetailView, self).get_context_data(**kwargs) context[''role''] = Role.objects.all() return context

También puedo enumerar un solo modelo usando una vista personalizada:

#views.py def object_list(request, model): obj_list = model.objects.all() template_name = ''contacts/index.html'' return render_to_response(template_name, {''object_list'': obj_list})

Aquí están los urls.py para estas dos pruebas:

(r''^$'', views.object_list, {''model'' : models.Individual}), (r''^individuals/$'', IndividualListView.as_view(), ), (r''^individuals/(?P<pk>/d+)/$'', IndividualDetailView.as_view(), ),

Entonces mi pregunta es "¿Cómo modifico esto para pasar más de un modelo a la plantilla?" ¿Es posible? Todas las preguntas similares en StackOverflow solo se refieren a dos modelos (que se pueden resolver usando get_extra_context).


Si desea compilarlo en Django 1.5, podrá utilizar versiones estables de CBV. Por favor encuentre el código a continuación.

Gran documento que puedes encontrar aquí 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)


Te sugiero que elimines tu vista de la lista de object_list ,

definir un diccionario para esta vista específica,

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... } }

y luego en tus urls:

#add this import to the top from django.views.generic import list_detail (r''^$'', list_detail.object_list, all_models_dict),


Terminé modificando la respuesta de @thikonom para usar vistas basadas en clases:

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

y en mi urls.py

url(r''^$'', IndexView.as_view(), name="home_list" ),