पेजिनेशन लागू करके अपने Django एप्लिकेशन की दक्षता और मापनीयता बढ़ाएँ। आरंभ करने के लिए आपको जो कुछ जानने की आवश्यकता है, वह यहां है।

पेजिनेशन बड़े डेटासेट के साथ काम करते समय उपयोगकर्ता के अनुभव और एप्लिकेशन के प्रदर्शन में सुधार करता है। पेजिनेशन सिस्टम के बिना, आपका एप्लिकेशन अधिकांश समय लैगिंग का अनुभव करेगा। Django के साथ, आप अपने वेब एप्लिकेशन को पेजिनेट करने के लिए पेजिनेशन के लिए अंतर्निहित समर्थन का लाभ उठा सकते हैं।

पेजिनेशन Django में कैसे काम करता है

Django में पेजिनेशन लागू करना इस बात पर निर्भर करता है कि आप क्लास-आधारित या फ़ंक्शन-आधारित विचारों के साथ काम करते हैं या नहीं। आपकी पसंदीदा पद्धति के बावजूद, अंतर्निहित सिद्धांत समान रहते हैं।

Django नामक एक वर्ग का उपयोग करता है पेजिनेटर पृष्ठांकन लागू करने के लिए। पेजिनेटर वर्ग कई विधियाँ प्रदान करता है जिनका उपयोग आप अपने पृष्ठांकन को अनुकूलित करने के लिए कर सकते हैं। प्रारंभ करते समय पेजिनेटर वर्ग, यह दो अनिवार्य पैरामीटर लेता है; पृष्ठांकित करने के लिए डेटा, और प्रति पृष्ठ दिखाने के लिए मदों की संख्या। पेजिनेटर अंतिम पृष्ठ पर रहने वाली वस्तुओं की न्यूनतम संख्या निर्दिष्ट करने के लिए अनाथों के लिए तीसरा वैकल्पिक पैरामीटर लेता है। डिफ़ॉल्ट रूप से, अनाथों का मान 0 है, जिसका अर्थ है कि सभी पृष्ठों में समान संख्या में आइटम हैं।

Django पेजिनेटेड पेज का URL इस के समान है: https://example.com/products/?page=3. पृष्ठ URL में पैरामीटर Django को बताता है कि उपयोगकर्ता कौन सा पृष्ठ देखना चाहता है। यह Django को यह निर्धारित करने में भी मदद करता है कि उस पृष्ठ के लिए डेटा का कौन सा भाग प्रदर्शित किया जाए।

इस परियोजना में प्रयुक्त कोड एक में उपलब्ध है गिटहब रिपॉजिटरी और आपके लिए एमआईटी लाइसेंस के तहत उपयोग करने के लिए स्वतंत्र है।

पेजिनेशन के लिए अपना Django प्रोजेक्ट सेट करें

इससे पहले कि आप Django में पेजिनेट करें, आपके पास होना चाहिए Django स्थापित करें और इसे अपने कंप्यूटर पर सेट करें. अपने कंप्यूटर पर Django सेट अप करने के बाद, आपको अपने डेटा के लिए एक ऐप और एक मॉडल बनाना चाहिए। यहाँ एक सरल मॉडल है जिसे आप कॉपी कर सकते हैं:

से django.db आयात मॉडल

कक्षाडाक(मॉडल। नमूना):

शीर्षक = मॉडल। चारफिल्ड (अधिकतम_लम्बाई =255)
लेखक = मॉडल। चारफिल्ड (अधिकतम_लम्बाई =50)
सामग्री = मॉडल। पाठ्य से भरा('पोस्ट सामग्री')

डीईएफ़__str__(खुद):
वापस करना स्व शीर्षक

उपरोक्त मॉडल ब्लॉग एप्लिकेशन के लिए है। यह प्रत्येक ब्लॉग पोस्ट के लिए शीर्षक, लेखक और सामग्री फ़ील्ड को परिभाषित करता है। इसमें एक तरीका भी है जो व्यवस्थापक पैनल में बेहतर उपयोगकर्ता अनुभव के लिए पोस्ट शीर्षक लौटाता है।

इस कमांड को चलाकर अपने मॉडल को माइग्रेट करें:

अजगर प्रबंधन.py मेकमाइग्रेशन और& अजगर प्रबंधन.py माइग्रेट

अपने मॉडल को माइग्रेट करने के बाद, आपको नेविगेट करना चाहिए ब्लॉग> admin.py इसे पंजीकृत करने के लिए। निम्नलिखित कोड नामक एक मॉडल को सफलतापूर्वक पंजीकृत करता है डाक.

से django.योगदान आयात व्यवस्थापक
से ।मॉडल आयात डाक # 'पोस्ट' को अपने मॉडल के नाम से बदलें

admin.site.register (पोस्ट)

अगला, एक सुपर उपयोक्ता बनाएँ और अपने Django व्यवस्थापक पैनल में पोस्ट जोड़ें। एक सुपर उपयोक्ता बनाने के लिए, इस कमांड का उपयोग करें:

python manage.py createsuperuser

उपरोक्त आदेश आपको नीचे दी गई छवि में सचित्र प्रक्रिया के माध्यम से ले जाएगा:

सुपरयूजर बनाने के बाद, अपना डेवलपमेंट सर्वर चलाएं और एडमिन पैनल पर नेविगेट करें।

अजगर manage.py runerver

एक बार जब आपका सर्वर शुरू हो जाए, तो नेविगेट करें http://127.0.0.1:8000/admin, लॉग इन करें और कुछ पोस्ट जोड़ें।

अगला, ब्राउज़र पर अपनी पोस्ट प्रस्तुत करने के लिए एक HTML टेम्प्लेट बनाएं। निम्न निर्देशिका में अपनी फ़ाइल बनाएँ: your_app/templates/your_app_name/index.html. यदि आप समझ नहीं पा रहे हैं कि टेम्प्लेट कैसे बनाए जाते हैं, तो हमारा पढ़ें Django के MVT आर्किटेक्चर के लिए परिचयात्मक गाइड.

फ़ंक्शन-आधारित दृश्य में Django पेजिनेशन

Django आपको क्लास-आधारित विचारों या फ़ंक्शन-आधारित विचारों के साथ एप्लिकेशन बनाने की अनुमति देता है। फ़ंक्शन-आधारित दृश्य का उपयोग करके अपने एप्लिकेशन को पेजिनेट करने के लिए। इन चरणों का पालन करें:

  • अपनी खोलो view.py फ़ाइल और आयात करें पेजिनेटर कक्षा।
से django.core.paginator आयात पेजिनेटर
  • अपने HTML टेम्प्लेट में पोस्ट रेंडर करने के लिए एक व्यू फंक्शन बनाएं।
से django.शॉर्टकट आयात प्रदान करना
से ।मॉडल आयात डाक
से django.core.paginator आयात पेजिनेटर

डीईएफ़लिस्ट व्यू(अनुरोध):
पोस्ट = पोस्ट.ऑब्जेक्ट्स.ऑल ()
वापस करना प्रस्तुत करना (अनुरोध, 'ब्लॉग/blog_list_view.html', {'पद': पोस्ट})

  • ब्राउज़र में अपनी पोस्ट दिखाने के लिए एक URL पैटर्न बनाएँ। अपनी प्रोजेक्ट निर्देशिका में URL पैटर्न को कॉन्फ़िगर करके प्रारंभ करें। खोलें urls.py प्रोजेक्ट स्तर पर फ़ाइल करें और इसे इसमें जोड़ें यूआरएलपैटर्न:
से django.urls आयात शामिल करना

urlपैटर्न = [
...,
पथ('', शामिल करना('ब्लॉग.urls')),
]

उपरोक्त कोड स्निपेट में, प्रतिस्थापित करें ब्लॉग आपके ऐप के नाम के साथ। यदि आप किसी प्रोजेक्ट और ऐप के बीच अंतर नहीं कर सकते हैं, तो आपको पता होना चाहिए कैसे एक परियोजना Django में एक ऐप से अलग है.

उपरोक्त कॉन्फ़िगरेशन करने के बाद, एक बनाएं urls.py आपकी ऐप निर्देशिका में फ़ाइल (इस मामले में, यह ब्लॉग फ़ोल्डर) और इस कोड स्निपेट को जोड़ें:

से django.urls आयात पथ
से .विचार आयात लिस्ट व्यू

urlपैटर्न = [
पथ('', सूची_दृश्य, नाम ='लिस्ट व्यू'),
]

जब आप अपना सर्वर चलाते हैं और नेविगेट करते हैं http://127.0.0.1:8000/, ब्राउज़र आपकी पोस्ट को आपकी निर्दिष्ट स्टाइल शीट के अनुसार प्रदर्शित करेगा।

  • पेजिनेशन लॉजिक जोड़ने के लिए अपने व्यू फंक्शन को संशोधित करें। यहाँ एक उदाहरण है:
डीईएफ़लिस्ट व्यू(अनुरोध):
पोस्ट = पोस्ट.ऑब्जेक्ट्स.ऑल ()
पृष्ठांकित = पेजिनेटर (पोस्ट, 3)
पेज_नंबर = अनुरोध। GET.get('पृष्ठ') # URL से अनुरोधित पृष्ठ संख्या प्राप्त करें

पेज = पेजिनेटेड.गेट_पेज (पेज_नंबर)
वापस करना प्रस्तुत करना (अनुरोध, 'ब्लॉग/blog_list_view.html', {'पृष्ठ':पृष्ठ})

उपरोक्त कोड स्निपेट तीन नए चर प्रस्तुत करता है: पृष्ठवार, पृष्ठ संख्या, और पृष्ठ. प्रत्येक चर निम्न कार्य करता है:

  1. पृष्ठवार वेरिएबल को इनिशियलाइज़ किया पेजिनेटर कक्षा। इस परिदृश्य में, पृष्ठांकित किया जाने वाला डेटा क्वेरी सेट है, पद, और यह लेता है 3 प्रति पृष्ठ प्रदर्शित करने के लिए मदों की संख्या के रूप में।
  2. पृष्ठ संख्या वेरिएबल को URL से पेज नंबर मिलता है। उदाहरण के लिए, में http://127.0.0.1:8000/?page=2पृष्ठ संख्या 2 है।
  3. पृष्ठ चर से प्रस्तुत करने के लिए विशिष्ट पृष्ठ को पुनः प्राप्त करता है पृष्ठवार चर।

अब तक, Django ने आपके पृष्ठ को पृष्ठांकित कर लिया होगा। आप इस चित्र में दिखाए गए URL प्रारूप का उपयोग करके विशिष्ट पृष्ठांकित पृष्ठों पर नेविगेट कर सकते हैं:

  • पृष्ठांकित पृष्ठों के लिए नेविगेशन प्रदर्शित करने के लिए अपने HTML टेम्पलेट को संशोधित करें। में उपलब्ध विधियों का उपयोग करना पेजिनेटर कक्षा आपको अपने पृष्ठ पर सरल नेविगेशन बनाने में सक्षम बनाती है। यहां एक उदाहरण दिया गया है जिसे आप अपने आरंभिक HTML कोड के नीचे जोड़ सकते हैं:
 {% अगर page.has_previous%}
<href="?पृष्ठ={{पृष्ठ.पिछला_पृष्ठ_संख्या}}"
वर्ग = "बीटीएन बीटीएन-द्वितीयक एमएक्स-एनएन"> पिछला>
{% अगर अंत %}

<href="?पेज=1"कक्षा="बीटीएन बीटीएन-माध्यमिक">पहला>

{% for num in page.paginator.page_range %}
{% अगर संख्या == पृष्ठ संख्या%}
<अवधि>{{संख्या}}अवधि>
{% अन्य %}
<href="? पृष्ठ = {{संख्या}}"कक्षा="बीटीएन बीटीएन-माध्यमिक एमएक्स -2">
{{संख्या}}
>
{% अगर अंत %}
{% अंत%}

<href="?पेज={{पेज.पेजिनेटर.नम_पेज}}"कक्षा="बीटीएन बीटीएन-माध्यमिक एमएक्स -2">
अंतिम
>

{% अगर page.has_next %}
<href="?पेज={{पेज.नेक्स्ट_पेज_नंबर}}"कक्षा="बीटीएन बीटीएन-माध्यमिक एमएक्स -2">
अगला
>
{% अगर अंत %}

उपरोक्त कोड स्निपेट में, पृष्ठांकन नेविगेशन कैसा दिखेगा यह निर्धारित करने के लिए निम्नलिखित विधियों का उपयोग सशर्त बयानों के संयोजन के साथ किया जाता है:

  1. has_previous: यह विधि वापस आती है सत्य यदि पृष्ठांकित डेटा में कोई पिछला पृष्ठ है।
  2. पिछला_पृष्ठ_संख्या: यह विधि पिछले पृष्ठ का मान लौटाती है।
  3. पेज सीमा: यह विधि आपको बताती है कि आपके पृष्ठांकित डेटा में कितने पृष्ठ हैं।
  4. संख्या: यह विधि वर्तमान पृष्ठ का मान लौटाती है।
  5. num_pages: यह विधि पृष्ठों की कुल संख्या लौटाती है।
  6. has_next: यह फ़ंक्शन वापस आता है सत्य यदि पृष्ठांकित डेटा में अगला पृष्ठ है।
  7. अगला_पेज_नंबर: यह विधि अगले पृष्ठ का मान लौटाती है।

वर्ग-आधारित दृश्य में Django पृष्ठांकन

वर्ग-आधारित दृश्य में, आपको आयात और प्रारंभ करने की आवश्यकता नहीं है पेजिनेटर कक्षा। वर्ग-आधारित दृश्य में पृष्ठांकन लागू करने के लिए, आपको एक विशेषता निर्दिष्ट करनी चाहिए paginate_by. अपने ऐप को वर्ग-आधारित दृश्य के साथ पृष्ठांकित करने के लिए इन चरणों का पालन करें:

  • एक वर्ग-आधारित दृश्य लिखें और निर्दिष्ट करें paginate_by गुण। यहाँ एक सरल उदाहरण है:
से ।मॉडल आयात डाक
से django.views.generic आयात लिस्ट व्यू

कक्षापोस्ट लिस्ट व्यू(लिस्ट व्यू):
मॉडल = पोस्ट
टेम्पलेट_नाम = 'ब्लॉग/blog_list_view.html'
संदर्भ_वस्तु_नाम = 'पृष्ठ'
पेजिनेट_बाय = 2

उपरोक्त दृश्य पहले लिखे गए फ़ंक्शन-आधारित दृश्य का वर्ग-आधारित संस्करण है। यह दृश्य Django के विरासत में मिला है लिस्ट व्यू वर्ग, आइटम सूचीबद्ध करने के लिए उपयोग किया जाता है। यह अपने तर्क को विशेषताओं के साथ परिभाषित करता है जैसे नमूना, टेम्पलेट नाम, संदर्भ_वस्तु_नाम, और paginate_by. paginate_by विशेषता निर्धारित करती है कि प्रति पृष्ठ कितने पोस्ट प्रदर्शित करने हैं; इस मामले में, 2 पद।

  • एक बार जब आप अपना विचार बना लेते हैं, तो अपना संशोधित करें urls.py इसका उपयोग करने के लिए फ़ाइल। ये रहा एक सरल उदाहरण:
से .विचार आयात पोस्ट लिस्ट व्यू

urlपैटर्न = [
पथ('', PostListView.as_view (), नाम ='लिस्ट व्यू'),
]

  • उपयोग करने के लिए अपने HTML टेम्पलेट को संशोधित करें page_obj पृष्ठांकन के लिए।
 {% अगर page_obj.has_previous%}
<href="?पृष्ठ={{page_obj.previous_page_number}}"
वर्ग = "बीटीएन बीटीएन-द्वितीयक एमएक्स-एनएन"> पिछला>
{% अगर अंत %}

<href="?पेज=1"कक्षा="बीटीएन बीटीएन-माध्यमिक">पहला>

{% for num in page_obj.paginator.page_range%}
{% अगर संख्या == page_obj.number%}
<अवधिकक्षा="वर्तमान पृष्ठ">{{संख्या}}अवधि>
{% अन्य %}
<href="? पृष्ठ = {{संख्या}}"कक्षा="बीटीएन बीटीएन-माध्यमिक एमएक्स -2">
{{संख्या}}
>
{% अगर अंत %}
{% अंत%}

<href="?पृष्ठ={{page_obj.paginator.num_pages}}"
वर्ग = "बीटीएन बीटीएन-माध्यमिक एमएक्स-एनएन">
अंतिम
>

{% अगर page.has_next %}
<href="?पेज={{पेज_ओबीजे.नेक्स्ट_पेज_नंबर}}"
वर्ग = "बीटीएन बीटीएन-माध्यमिक एमएक्स-एनएन">
अगला
>
{% अगर अंत %}

फ़ंक्शन-आधारित दृश्य के लिए HTML टेम्प्लेट के विपरीत, यह टेम्प्लेट उपयोग करता है page_obj के बजाय पृष्ठ पृष्ठ वस्तु का प्रतिनिधित्व करने के लिए। Django में वर्ग-आधारित पृष्ठांकन के लिए यह डिफ़ॉल्ट व्यवहार है।

अपने एप्लिकेशन को स्केलेबल बनाने के लिए पेजिनेशन का उपयोग करें

पेजिनेशन एक समय में डेटा के छोटे सबसेट लाने और प्रदर्शित करने से आपके सर्वर/डेटाबेस पर लोड कम कर देता है। पृष्ठांकन से आपकी वेबसाइटों का प्रदर्शन बढ़ेगा। आपके एप्लिकेशन का उपयोग करते समय आपके उपयोगकर्ताओं को भी अच्छा अनुभव होगा।

फ़ंक्शन-आधारित दृश्यों की तुलना में क्लास-आधारित दृश्य अधिक समय और कोड बचाते हैं, लेकिन आप अपनी पसंद और प्रोजेक्ट विनिर्देशों के आधार पर किसी एक का उपयोग कर सकते हैं।