code: def generate_slices(sliceable_set, batch_len=1, length=None, start_batch=0):
      
      if length is None:
          try:
              length = sliceable_set.count()
          except (IndexError, ValueError, AttributeError, TypeError):
              length = len(sliceable_set)
      length = int(length)
  
      for i in range(int(length / batch_len + 1)):
          if i < start_batch:
              continue
          start = i * batch_len
          end = min((i + 1) * batch_len, length)
          if start != end:
              yield tuple(sliceable_set[start:end])
      raise StopIteration
docs: Iterate through a sequence (or generator) in batches of length `batch_len`
  
      See Also:
        pug.dj.db.generate_queryset_batches
  
      References:
        http://stackoverflow.com/a/761125/623735
  
      Examples:
        >>  [batch for batch in generate_slices(range(7), 3)]
        [(0, 1, 2), (3, 4, 5), (6,)]
        >>  from django.contrib.auth.models import User, Permission
        >>  len(list(generate_slices(User.objects.all(), 2)))       == max(math.ceil(User.objects.count() / 2.), 1)
        True
        >>  len(list(generate_slices(Permission.objects.all(), 2))) == max(math.ceil(Permission.objects.count() / 2.), 1)
        True