Django 2.1
Pagination

Pagination
Django कुछ कक्षाएं प्रदान करता है जो आपको पृष्ठांकित डेटा को प्रबंधित करने में मदद करती हैं - अर्थात, वह डेटा जो कई पृष्ठों में विभाजित है, "पिछला / अगला" लिंक के साथ।
ये वर्ग
django/core/paginator.py
।
उदाहरण
Paginator
को ऑब्जेक्ट्स की एक सूची दें, साथ ही प्रत्येक पृष्ठ पर आपके द्वारा पसंद की जाने वाली वस्तुओं की संख्या, और यह आपको प्रत्येक पेज के लिए आइटम एक्सेस करने के तरीके प्रदान करती है:
>>> from django.core.paginator import Paginator >>> objects = ['john', 'paul', 'george', 'ringo'] >>> p = Paginator(objects, 2) >>> p.count 4 >>> p.num_pages 2 >>> type(p.page_range) <class 'range_iterator'> >>> p.page_range range(1, 3) >>> page1 = p.page(1) >>> page1 <Page 1 of 2> >>> page1.object_list ['john', 'paul'] >>> page2 = p.page(2) >>> page2.object_list ['george', 'ringo'] >>> page2.has_next() False >>> page2.has_previous() True >>> page2.has_other_pages() True >>> page2.next_page_number() Traceback (most recent call last): ... EmptyPage: That page contains no results >>> page2.previous_page_number() 1 >>> page2.start_index() # The 1-based index of the first item on this page 3 >>> page2.end_index() # The 1-based index of the last item on this page 4 >>> p.page(0) Traceback (most recent call last): ... EmptyPage: That page number is less than 1 >>> p.page(3) Traceback (most recent call last): ... EmptyPage: That page contains no results
ध्यान दें
ध्यान दें कि आप
Paginator
एक सूची / ट्यूपल, एक Django
QuerySet
, या किसी अन्य ऑब्जेक्ट को एक
count()
या
__len__()
विधि के साथ दे सकते हैं।
पारित ऑब्जेक्ट में निहित वस्तुओं की संख्या का निर्धारण करते समय,
Paginator
पहले कॉलिंग
count()
कोशिश करेगा, फिर
len()
का उपयोग करने के लिए
Paginator
len()
यदि पास की गई ऑब्जेक्ट में कोई
count()
विधि नहीं है।
यह Django के
QuerySet
जैसी वस्तुओं को उपलब्ध होने पर अधिक कुशल
count()
पद्धति का उपयोग करने की अनुमति देता है।
एक दृश्य में
Paginator
का उपयोग करना
यहाँ एक
Paginator
को
Paginator
करने के लिए एक दृश्य में
Paginator
का उपयोग करके थोड़ा अधिक जटिल उदाहरण
Paginator
गया है।
हम यह दिखाने के लिए कि आप परिणाम कैसे प्रदर्शित कर सकते हैं, दोनों साथ-साथ देखने के लिए टेम्पलेट देते हैं।
यह उदाहरण मानता है कि आपके पास एक
Contacts
मॉडल है जो पहले ही आयात किया जा चुका है।
देखने का कार्य इस तरह दिखता है:
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator from django.shortcuts import render def listing(request): contact_list = Contacts.objects.all() paginator = Paginator(contact_list, 25) # Show 25 contacts per page page = request.GET.get('page') contacts = paginator.get_page(page) return render(request, 'list.html', {'contacts': contacts})
टेम्प्लेट
list.html
, आप स्वयं वस्तुओं से किसी भी रोचक जानकारी के साथ पृष्ठों के बीच नेविगेशन शामिल करना चाहेंगे:
{% for contact in contacts %} {# Each "contact" is a Contact model object. #} {{ contact.full_name|upper }}<br> ... {% endfor %} <div class="pagination"> <span class="step-links"> {% if contacts.has_previous %} <a href="?page=1">« first</a> <a href="?page={{ contacts.previous_page_number }}">previous</a> {% endif %} <span class="current"> Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}. </span> {% if contacts.has_next %} <a href="?page={{ contacts.next_page_number }}">next</a> <a href="?page={{ contacts.paginator.num_pages }}">last »</a> {% endif %} </span> </div>
Paginator
ऑब्जेक्ट्स
Paginator
वर्ग में यह निर्माता है:
-
class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
[source]
आवश्यक तर्क
-
object_list
-
एक सूची, tuple,
QuerySet
, या एकcount()
या__len__()
विधि के साथ अन्य स्लाइसेबल ऑब्जेक्ट। सुसंगत पृष्ठांकन के लिए,QuerySet
को आदेश दिया जाना चाहिए, जैसे कि एकorder_by()
क्लॉज के साथ या मॉडल पर डिफ़ॉल्टordering
साथ।प्रदर्शन के मुद्दों को बड़ा
QuerySet
sQuerySet
यदि आप बहुत बड़ी संख्या में आइटम के साथ एक
QuerySet
का उपयोग कर रहे हैं, तो उच्च डेटाबेस संख्याओं का अनुरोध करना कुछ डेटाबेस पर धीमा हो सकता है, क्योंकि परिणामीLIMIT
/OFFSET
क्वेरी कोOFFSET
रिकॉर्ड की संख्या की गणना करने की आवश्यकता होती है जो पृष्ठ संख्या जितनी अधिक होती है। । -
per_page
-
किसी पृष्ठ पर शामिल करने के लिए अधिकतम आइटम, अनाथों सहित नहीं (नीचे
orphans
वैकल्पिक तर्क देखें)।
वैकल्पिक तर्क
-
orphans
-
जब आप बहुत कम वस्तुओं के साथ अंतिम पृष्ठ नहीं रखना चाहते हैं तो इसका उपयोग करें।
यदि अंतिम पृष्ठ में सामान्य रूप से
orphans
बराबर या उससे कम आइटम होंगे, तो उन वस्तुओं को पिछले पृष्ठ पर जोड़ा जाएगा (जो अंतिम पृष्ठ बन जाता है) स्वयं द्वारा एक पृष्ठ पर वस्तुओं को छोड़ने के बजाय। उदाहरण के लिए, 23 वस्तुओं के साथ,per_page=10
, औरorphans=3
, दो पृष्ठ होंगे; पहला पेज जिसमें 10 आइटम हैं और दूसरा (और अंतिम) पेज है जिसमें 13 आइटम हैं।orphans
शून्य पर चूक करते हैं, जिसका अर्थ है कि पृष्ठ कभी संयुक्त नहीं होते हैं और अंतिम पृष्ठ में एक आइटम हो सकता है। -
allow_empty_first_page
-
पहले पन्ने को खाली होने दिया जाए या नहीं।
यदि
False
औरobject_list
खाली है, तो एकEmptyPage
त्रुटि उठाई जाएगी।
तरीके
-
Paginator.get_page(number)
[source] -
Django 2.0 में नया:
दी गई 1-आधारित इंडेक्स के साथ एक
Page
ऑब्जेक्ट लौटाता है, जबकि सीमा से बाहर और अमान्य पेज नंबर भी संभालता है।यदि पृष्ठ संख्या नहीं है, तो यह पहला पृष्ठ लौटाता है। यदि पृष्ठ संख्या नकारात्मक है या पृष्ठों की संख्या से अधिक है, तो यह अंतिम पृष्ठ लौटाता है।
यह केवल एक अपवाद (
EmptyPage
) उठाता है यदि आपPaginator(..., allow_empty_first_page=False)
निर्दिष्ट करते हैं औरPaginator(..., allow_empty_first_page=False)
खाली है।
-
Paginator.page(number)
[source] -
दिए गए 1-आधारित सूचकांक के साथ एक
Page
वस्तु लौटाता है। यदि दिए गए पृष्ठ संख्या मौजूद नहीं है, तोInvalidPage
है।
गुण
-
Paginator.count
-
सभी पृष्ठों पर कुल वस्तुओं की संख्या।
ध्यान दें
ऑब्जेक्ट_लिस्ट में शामिल ऑब्जेक्ट्स की संख्या निर्धारित करते समय,
Paginator
सबसे पहले ऑब्जेक्ट_Paginator
object_list.count()
कॉल करने का प्रयास करेगा। यदिobject_list
में कोईcount()
विधि नहीं है, तोPaginator
len(object_list)
का उपयोग करने के लिए वापसPaginator
जाएगा। यह उपलब्ध होने पर अधिक कुशलcount()
पद्धति का उपयोग करने के लिए, Django केQuerySet
जैसी वस्तुओं को अनुमति देता है।
-
Paginator.num_pages
-
पृष्ठों की कुल संख्या।
-
Paginator.page_range
-
पृष्ठ संख्याओं का 1-आधारित श्रेणी पुनरावृत्ति, जैसे उपज
[1, 2, 3, 4]
।
InvalidPage
अपवाद
-
exception InvalidPage
[source] -
जब एक पेजिनेटर अमान्य पृष्ठ संख्या पारित किया जाता है तो अपवादों के लिए एक आधार वर्ग।
यदि अनुरोधित पृष्ठ अमान्य है (यानी, पूर्णांक नहीं) या कोई ऑब्जेक्ट नहीं है तो
Paginator.page()
विधि अपवाद को उठाती है।
आम तौर पर, यह
InvalidPage
अपवाद को पकड़ने के लिए पर्याप्त है, लेकिन यदि आप अधिक ग्रैन्युलैरिटी चाहते हैं, तो आप निम्न अपवादों में से किसी को भी पकड़ सकते हैं:
-
exception PageNotAnInteger
[source] -
जब
page()
को एक ऐसा मान दिया जाता है जो पूर्णांक नहीं होता है।
-
exception EmptyPage
[source] -
जब
page()
को वैध मान दिया जाता है, लेकिन उस पृष्ठ पर कोई वस्तु मौजूद नहीं होती है।
अपवाद के दोनों
InvalidPage
उपवर्ग हैं, इसलिए आप
except InvalidPage
एक साधारण से दोनों को संभाल सकते हैं।
Page
ऑब्जेक्ट्स
आप आमतौर पर
Page
ऑब्जेक्ट्स को हाथ से नहीं बनाएंगे - आप उन्हें
Paginator.page()
का उपयोग करके प्राप्त करेंगे।
-
class Page(object_list, number, paginator)
[source] -
एक पृष्ठ,
len()
का उपयोग करते समय या इसे सीधे पुनरावृत्त करते समयPage.object_list
अनुक्रम की तरह कार्य करता है।
तरीके
-
Page.has_next()
[source] -
यदि अगला पृष्ठ है तो
True
।
-
Page.has_previous()
[source] -
यदि पिछला पृष्ठ है तो
True
।
-
Page.has_other_pages()
[source] -
यदि अगला या पिछला पृष्ठ है, तो यह सही है।
-
Page.next_page_number()
[source] -
अगला पेज नंबर देता है। यदि अगला पृष्ठ मौजूद नहीं है, तो
InvalidPage
है।
-
Page.previous_page_number()
[source] -
पिछला पृष्ठ क्रमांक लौटाता है। यदि पिछले पृष्ठ मौजूद नहीं है, तो
InvalidPage
है।
-
Page.start_index()
[source] -
पृष्ठ पर पहले ऑब्जेक्ट का 1-आधारित इंडेक्स लौटाता है, जो पेजिनेटर की सूची की सभी वस्तुओं के सापेक्ष है। उदाहरण के लिए, जब प्रति पृष्ठ 2 वस्तुओं के साथ 5 वस्तुओं की सूची तैयार की जाती है, तो दूसरे पृष्ठ का
start_index()
3
वापस आ जाएगा।
-
Page.end_index()
[source] -
पृष्ठ पर अंतिम ऑब्जेक्ट का 1-आधारित इंडेक्स लौटाता है, जो पेजिनेटर की सूची की सभी वस्तुओं के सापेक्ष है। उदाहरण के लिए, प्रति पृष्ठ 2 वस्तुओं के साथ 5 ऑब्जेक्ट्स की सूची को पृष्ठांकित करते समय, दूसरे पृष्ठ का
end_index()
4
वापस आ जाएगा।
गुण
-
Page.object_list
-
इस पृष्ठ पर वस्तुओं की सूची।
-
Page.number
-
इस पृष्ठ के लिए 1-आधारित पृष्ठ संख्या।
-
Page.paginator
-
संबंधित
Paginator
वस्तु।