Enviar Múltiples listas de una vista a un Template Django

Enviar Múltiples listas de una vista a un Template Django

Publicamos este artículo como respuesta a una pregunta del curso Django de básico a profesional que tenemos en Udemy. En este post veremos de qué maneras podemos enviar varias listas de modelos distintos a un template Django.

Como se menciona en el resumen este articulo es estrictamente un respuesta a una pregunta con el mismo titulo del articulo hecha por un estudiante en nuestro curso de UDEMY - Django de Basico a Profesional 

Listar más de dos modelos en una sola Vista, Django. 

Para ello nos basaremos en la clase 42 del curso, por si el orden cambia pueden buscarlo por el título de clase: “DetailView más detalles” Aquí mencionamos que todas las vistas poseen métodos que podemos intervenir y sobre-escribir a nuestro antojo. 

Utilizaremos en este caso esa premisa, seguiremos trabajo con el ListView para que liste nuestra lista principal o de nuestro modelo principal, al mismo tiempo vamos a intervenir el método get_context_data para enviar un contexto extra aparte del que ya sabemos que envía el get_queryset con el ListView. Veamos el código:

  • Recordemos primero que Tendremos un Modelo empleado del cual queremos listar todos sus registros
  • Pero tambien en la misma vista deseamos listar todas los registros de otro modelo llamado habilidades 

 

class ListEmpleados(ListView):

    template_name = 'persona/lista.html'

    context_object_name = 'empelados'

             def get_context_data(self, **kwargs):

                   context = super(ListEmpleados, self).get_context_data(**kwargs)

                   context['habilidades'] = Habilidades.objects.all()

                   return context

   def get_queryset(self):

         lista = Empleado.objects.all()

         return lista

 

Explicando este codigo, vemos que en la funcion normal de un ListView get_queryset() enviamos un codigo normal para este tipo de funcion, lo que almacenara la lista resultado en la variable "context_object_name" de el ListView, pero como necesitamos enviar una lista mas, crear un nuevo contexto en la funcion "get_context_data" con una varibale habilidades que sera la que contenga la lista de todos los registros del modelo Habilidades ----> context['habilidades'] = Habilidades.objects.all()

Si se desea enviar muchas mas listas podriamos solo agregar dentro de la misma funcion algun otro contexto mas, por ejemplo:  context['lista_departamentos'] = Departamentos.objects.all() y con ello estariamos enviando un nuevo contexto que alberga una lista en este caso con la variable de contexto "lista_departamentos"

Déjanos tu correo y entérate de mas de estos artículos: