2009-11-06 20 views
9

Herkese merhaba! Sayfa ürünlerini göster django pagination içinde gösterme

benim şablonları Django sayfalandırma kullanarak "52 adetten 1-10 gösteriliyor" gibi bir şey göstermek için nasıl anlamaya çalışıyorum.

ben sayfalandırma kendisini gerçekleştirdiğini ancak hiçbir şey bu gereksinim hakkında aklıma geliyor. Herhangi bir fikrin var mı?

cevap

37

bilmiyorum. the documentation'un gösterdiği gibi, tüm bu özellikler zaten kullanılabilir.

paginator nesneleri tüm sayfalarda nesnelerin toplam sayısını gösterir bir count niteliği var ve Page nesneler start_index ve end_index özelliklere sahiptir.

{{ page.start_index }} to {{ page.end_index }} of {{ page.paginator.count }}. 
+0

whoa! Bu tam olarak aradığım şey. Teşekkürler! – webgonewild

+1

Bu çok yardımcı oldu - teşekkürler. Sadece şunu belirtmeliyim ki, 'ListView' içinde varsayılan olarak nesne 'page' yerine' page_obj' olarak adlandırılır. – BigglesZX

0
totalPages = math.ceil(float(totalRecords)/recordsPerPage) 

veya

paginatorInstance.num_pages # this is there by default 

, o kadar da zor değil miydi o?

1

django Paginator amacı num_pages özelliğine sahiptir. Görünümünüze doğru verileri yalnızca şablonunuza aktarabilir ve orada gösterebilirsiniz.

Yani bir (kaba) örnek olarak: şablon

showing {{start_count} - {{end_count}} of {{num_pages}} 

current_page = ## input param 
items_per_page = 10 
paginator = Paginator(result, items_per_page)  

... 
return render_to_response('template.html', 
    { 
    'num_pages': paginator.num_pages, 
    'start_count': items_per_page * current_page + 1, 
    'end_count': (items_per_page * current_page + 1) + len(paginator(current_page).object_list) 
    'items_per_page': items_per_page 
    } 

(Bir derleyici yararlanmadan bu kodu yazmış

görünümü, böylece testin

+0

sadece şablon ve sonra gibi pagintator özelliklerine erişmek için paginator göndermek:

Yani, varsayarak size page şablon bağlamını geçen {{offers.previous_page_number}}, {{offers.next_page_number}} {{offers.paginator.count}} – gerpaick

3

Sahnelerin arkasında daha karmaşık bir şey yapmanız gerekecek. Ve lütfen ben bir python dev olduğumda, werkzeug ve jinja2'yi uzun zamandır kullanıyor olduğumu ve django sözdiziminin biraz paslı olduğunu lütfen unutmayın. Ayrıca bu, kuru kodluydu (tarayıcıda buraya yazdığım gibi) ve amaçlanan şekilde çalıştığından emin olmak için test edilmelidir.

Genellikle bir sayfalama nesnesi oluşturmak ve sayfalar tarafından filtre edilmeyen bir sorgu nesnesi geçmek gerekir, ayrıca nasıl sayfa başına kadar ve hangi sayfa sende bunu söyleyebilir.

Yani için belli belirsiz benzer bir şey: o zaman

Paginator(query, objects_per_page, current_page_number) 

Ve şablonuna çıkan paginator nesnesi iletir.

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] 

Sonra şablonda yapacağın şey hazır olduğunuzda

Showing {{paginator.lower_limit}}-{{paginator.upper_limit}} of {{paginator.total}} 

gibi Ve daha sonra: Eğer benzer bir şey yapmak ister
paginator en init İçinde

sadece paginator.objects üzerinde yineleme olabilecek nesne tekrarlatacak.

Bunu size temiz bir şekilde yapabilirsiniz dair genel bir fikir verir umarım. Herkes bu kadar durumu karıştırma neden

+0

Peharps, alt_dizini ve upper_limit özniteliklerini eklemek için django.core.paginator.Paginator sınıfının alt sınıfını daha iyi sınıflandırır. – webgonewild

+0

Mümkün, django'ları bir süre sessiz kullanmıyorum. Ayrıca num_pages oturduğum yerden geçersiz bir statü gibi görünüyor. Toplam sayfa sayısını değil, toplam nesnelerin sayısını istiyor görünüyorsunuz, bununla birlikte django paginator'ında bunun için başka bir çözüm olabilir. –

İlgili konular