Tendrá que hacer algo moderadamente más complejo detrás de escena. Y tenga en cuenta que, aunque soy un desarrollador de python, he estado usando werkzeug y jinja2 durante mucho tiempo, por lo que mi sintaxis de django está un poco oxidada. También esto estaba codificado en seco (como en el que acabo de tipear aquí en el navegador) y debe probarse para asegurarse de que funciona según lo previsto.
Generalmente voy a crear un objeto de paginación, y pasarlo en un objeto de consulta que no está filtrado por páginas, también puede decirle cuántos por página y en qué página está.
Así que algo vagamente similar a:
Paginator(query, objects_per_page, current_page_number)
y luego pasar el objeto paginador resultante en la plantilla.
Dentro init del paginador que querría hacer algo similar a:
def __init__(self, query, objects_per_page, current_page_number):
self.total = query.count()
self.per_page = objects_per_page
self.current_page_number = current_page_number
self.lower_limit = objects_per_page * current_page_number
self.upper_limit = objects_per_page * (current_page_number + 1)
if self.upper_limit > self.total:
self.upper_limit = self.total
self.objects = query[self.lower_limit - 1:self.upper_limit - 1]
Luego, en la plantilla que harías algo así como
Showing {{paginator.lower_limit}}-{{paginator.upper_limit}} of {{paginator.total}}
Y más tarde cuando esté listo Para iterar sobre los objetos, puedes iterar sobre paginator.objects.
Espero que esto le dé una idea general de cómo puede hacer esto limpiamente.
¡Whoa! esto es exactamente lo que estaba buscando. ¡Gracias! – webgonewild
Esto fue muy útil, gracias. La única nota que tendría es que por defecto en un 'ListView' el objeto se llama' page_obj' en lugar de 'page'. – BigglesZX