Dovrai fare qualcosa di moderatamente più complesso dietro le quinte. E per favore nota che mentre sono un python dev, ho usato werkzeug e jinja2 da molto tempo e quindi la mia sintassi di django è un po 'arrugginita. Anche questo era codificato a secco (come ho appena digitato qui nel browser) e dovrebbe essere testato per assicurarsi che funzioni come previsto.
Generalmente creerò un oggetto di impaginazione e lo passerò in un oggetto di query che non è filtrato dalle pagine, è inoltre possibile indicarne il numero per pagina e la pagina in cui ci si trova.
Quindi qualcosa di vagamente simile a:
Paginator(query, objects_per_page, current_page_number)
E poi passare l'oggetto Paginator risultante nel modello.
All'interno init del Paginator che ci si vuole fare qualcosa di simile 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]
Poi nel modello si farebbe qualcosa di simile
Showing {{paginator.lower_limit}}-{{paginator.upper_limit}} of {{paginator.total}}
E più tardi, quando si è pronti per scorrere gli oggetti si può semplicemente iterare su paginator.objects.
Spero che ti dia un'idea generale di come puoi farlo in modo pulito.
fonte
2009-11-06 18:29:52
whoa! questo è esattamente quello che stavo cercando. Grazie! – webgonewild
Questo è stato molto utile - grazie. L'unica nota che avrei è che per impostazione predefinita in un 'ListView' l'oggetto è chiamato' page_obj' piuttosto che 'page'. – BigglesZX