عزز كفاءة تطبيق Django وقابليته للتوسع من خلال تطبيق ترقيم الصفحات. إليك كل ما تحتاج إلى معرفته للبدء.

يعمل ترقيم الصفحات على تحسين تجربة المستخدم وأداء التطبيق عند التعامل مع مجموعات البيانات الكبيرة. بدون وجود نظام ترقيم الصفحات ، سيواجه تطبيقك تأخيرًا معظم الوقت. مع Django ، يمكنك الاستفادة من الدعم المدمج لترقيم الصفحات لترقيم تطبيق الويب الخاص بك.

كيف يعمل ترقيم الصفحات في Django

يمكن أن يختلف تطبيق ترقيم الصفحات في Django اعتمادًا على ما إذا كنت تعمل باستخدام طرق العرض المستندة إلى الفصل أو القائمة على الوظائف. بغض النظر عن طريقتك المفضلة ، تظل المبادئ الأساسية كما هي.

يستخدم Django فئة تسمى مرقم لتنفيذ ترقيم الصفحات. ال مرقم توفر class عدة طرق يمكنك استخدامها لتخصيص ترقيم الصفحات. عند تهيئة ملف مرقم الطبقة ، تأخذ معلمتين إلزاميتين ؛ البيانات المطلوب ترقيمها وعدد العناصر المراد عرضها في كل صفحة. ال مرقم يأخذ معلمة اختيارية ثالثة للأيتام لتحديد الحد الأدنى لعدد العناصر التي يجب أن تبقى في الصفحة الأخيرة. بشكل افتراضي ، تكون قيمة الأيتام هي 0 مما يعني أن جميع الصفحات تحتوي على نفس عدد العناصر.

instagram viewer

عنوان URL لصفحة Django المرقمة مشابه لما يلي: https://example.com/products/?page=3. ال صفحة المعلمة في عنوان URL تخبر Django بالصفحة التي يريد المستخدم رؤيتها. كما أنه يساعد Django في تحديد أي جزء من البيانات سيتم عرضه لتلك الصفحة.

الكود المستخدم في هذا المشروع متاح في ملف مستودع جيثب وهو مجاني لك لاستخدامه بموجب ترخيص MIT.

قم بإعداد مشروع Django الخاص بك من أجل ترقيم الصفحات

قبل ترقيم الصفحات في Django ، يجب أن يكون لديك تثبيت Django وإعداده على جهاز الكمبيوتر الخاص بك. بعد إعداد Django على جهاز الكمبيوتر الخاص بك ، يجب عليك إنشاء تطبيق ونموذج لبياناتك. إليك نموذج بسيط يمكنك نسخه:

من django.db يستورد عارضات ازياء

فصلبريد(عارضات ازياء. نموذج):

العنوان = النماذج. CharField (أقصى طول =255)
المؤلف = النماذج. CharField (أقصى طول =50)
المحتوى = النماذج. حقل النص('آخر المحتوى')

def__str__(الذات):
يعود العنوان الذاتي

النموذج أعلاه لتطبيق مدونة. وهي تحدد حقول العنوان والمؤلف والمحتوى لكل منشور مدونة. كما أن لديها طريقة تُرجع عنوان المنشور لتجربة مستخدم أفضل في لوحة الإدارة.

قم بترحيل النموذج الخاص بك عن طريق تشغيل هذا الأمر:

python management.py makemigrations && python management.py الهجرة

بعد ترحيل النموذج الخاص بك ، يجب أن تنتقل إلى بلوق> admin.py لتسجيله. يقوم الكود التالي بتسجيل نموذج يسمى بنجاح بريد.

من django.contrib يستورد مسؤل
من .عارضات ازياء يستورد بريد # استبدل "Post" باسم نموذجك

admin.site.register (Post)

بعد ذلك ، أنشئ مستخدمًا متميزًا وأضف منشورات في لوحة إدارة Django. لإنشاء مستخدم متميز ، استخدم هذا الأمر:

بيثون management.py يخلق المستخدم الخارق

سيأخذك الأمر أعلاه خلال العملية الموضحة في الصورة أدناه:

بعد إنشاء مستخدم متميز ، قم بتشغيل خادم التطوير الخاص بك وانتقل إلى لوحة الإدارة.

بيثون MANAGER.py runserver

بمجرد أن يبدأ الخادم الخاص بك ، انتقل إلى http://127.0.0.1:8000/adminوتسجيل الدخول وإضافة بعض المنشورات.

بعد ذلك ، قم بإنشاء قالب HTML لعرض مشاركاتك على المتصفح. قم بإنشاء ملفك في الدليل التالي: your_app / قوالب / your_app_name / index.html. إذا كنت لا تفهم كيفية إنشاء القوالب ، فاقرأ الدليل التمهيدي لهندسة دجانجو MVT.

جانغو ترقيم الصفحات في عرض قائم على الوظيفة

يتيح لك Django إنشاء تطبيقات إما باستخدام طرق عرض تستند إلى الفئة أو طرق عرض تعتمد على الوظائف. لترقيم تطبيقك باستخدام طريقة عرض تعتمد على الوظيفة. اتبع هذه الخطوات:

  • افتح views.py ملف واستيراد ملف مرقم فصل.
من django.core.paginator يستورد مرقم
  • قم بإنشاء وظيفة عرض لتقديم المشاركات في نموذج HTML الخاص بك.
من django.shortcuts يستورد يجعل
من .عارضات ازياء يستورد بريد
من django.core.paginator يستورد مرقم

defعرض القائمة(طلب):
المشاركات = Post.objects.all ()
يعود تقديم (طلب ، "blog / blog_list_view.html", {'دعامات':دعامات})

  • قم بإنشاء نمط URL لإظهار مشاركاتك في المتصفح. ابدأ بتكوين نمط عنوان URL في دليل مشروعك. افتح ال urls.py ملف على مستوى المشروع وأضف هذا إلى ملف أنماط عنوان url:
من django.urls يستورد يشمل

أنماط عنوان url = [
...,
طريق(''، يشمل("blog.urls")),
]

في مقتطف الشفرة أعلاه ، استبدل مدونة باسم التطبيق الخاص بك. إذا لم تتمكن من التفريق بين مشروع وتطبيق ما ، فيجب أن تعرف ذلك كيف يختلف المشروع عن تطبيق في Django.

بعد إجراء التكوين أعلاه ، قم بإنشاء ملف urls.py ملف في دليل التطبيق (في هذه الحالة ، يكون ملف مدونة المجلد) وأضف مقتطف الشفرة هذا:

من django.urls يستورد طريق
من .الآراء يستورد عرض القائمة

أنماط عنوان url = [
طريق(''، list_view ، الاسم ='عرض القائمة'),
]

عند تشغيل الخادم الخاص بك والانتقال إلى http://127.0.0.1:8000/، سيعرض المتصفح مشاركاتك وفقًا لورقة الأنماط المحددة الخاصة بك.

  • قم بتعديل وظيفة العرض الخاصة بك لإضافة منطق ترقيم الصفحات. هذا مثال:
defعرض القائمة(طلب):
المشاركات = Post.objects.all ()
مرقّم الصفحات = ترقيم الصفحات (المشاركات ، 3)
page_number = طلب. GET.get ('صفحة') # احصل على رقم الصفحة المطلوب من URL

page = paginated.get_page (page_number)
يعود تقديم (طلب ، "blog / blog_list_view.html", {'صفحة':صفحة})

يقدم مقتطف الشفرة أعلاه ثلاثة متغيرات جديدة: مرقم, رقم الصفحة، و صفحة. يقوم كل متغير بما يلي:

  1. ال مرقم متغير تهيئة مرقم فصل. في هذا السيناريو ، البيانات المراد ترقيمها هي مجموعة الاستعلام ، دعامات، ويستغرق الأمر 3 كعدد العناصر المراد عرضها في كل صفحة.
  2. ال رقم الصفحة المتغير يحصل على رقم الصفحة من URL. على سبيل المثال ، في http://127.0.0.1:8000/?page=2، رقم الصفحة هو 2.
  3. ال صفحة يسترد المتغير الصفحة المحددة ليتم عرضها من ملف مرقم عامل.

الآن ، يجب أن يكون Django قد قام بترقيم صفحتك. يمكنك الانتقال إلى صفحات محددة مرقمة باستخدام تنسيق URL الموضح في هذه الصورة:

  • قم بتعديل قالب HTML الخاص بك لعرض التنقل للصفحات المرقمة. باستخدام الطرق المتاحة في مرقم يمكنك من إنشاء تنقل بسيط على صفحتك. إليك مثال يمكنك إضافته أسفل رمز HTML الأولي:
 {٪ if page.has_pr السابق٪}
<أhref="؟ page = {{page.previous_page_number}}"
class = "btn btn-Secondary mx-NN"> السابقأ>
{٪ إنهاء إذا ٪}

<أhref="؟ الصفحة = 1"فصل="btn btn-second">أولاًأ>

{٪ لـ num in page.paginator.page_range٪}
{٪ if num == page.number٪}
<فترة>{{عدد}}فترة>
{٪ آخر ٪}
<أhref="؟ page = {{num}}"فصل="btn btn-second mx-2">
{{عدد}}
أ>
{٪ إنهاء إذا ٪}
{٪ endfor٪}

<أhref="؟ page = {{page.paginator.num_pages}}"فصل="btn btn-second mx-2">
آخر
أ>

{٪ if page.has_next٪}
<أhref="؟ page = {{page.next_page_number}}"فصل="btn btn-second mx-2">
التالي
أ>
{٪ إنهاء إذا ٪}

في مقتطف الشفرة أعلاه ، تُستخدم الطرق التالية جنبًا إلى جنب مع العبارات الشرطية لتحديد كيف سيبدو التنقل بين الصفحات:

  1. لديه_السابق: هذه الطريقة تعود حقيقي إذا كانت هناك صفحة سابقة في البيانات المرقمة.
  2. Previous_page_number: تقوم هذه الطريقة بإرجاع قيمة الصفحة السابقة.
  3. page_range: تتيح لك هذه الطريقة معرفة عدد الصفحات الموجودة في بياناتك المرقمة.
  4. رقم: تقوم هذه الطريقة بإرجاع قيمة الصفحة الحالية.
  5. عدد_الصفحات: تقوم هذه الطريقة بإرجاع العدد الإجمالي للصفحات.
  6. has_next: هذه الوظيفة ترجع حقيقي إذا كانت هناك صفحة تالية في البيانات المرقمة.
  7. next_page_number: هذه الطريقة ترجع قيمة الصفحة التالية.

جانغو ترقيم الصفحات في عرض قائم على الفصل

في العرض المستند إلى الفصل الدراسي ، لا يتعين عليك استيراد ملف مرقم فصل. لتنفيذ ترقيم الصفحات في طريقة عرض تعتمد على الفئة ، يجب تحديد سمة تسمى paginate_by. اتبع هذه الخطوات لترقيم تطبيقك باستخدام طريقة عرض تستند إلى الفئة:

  • اكتب عرضًا قائمًا على الفصل وحدد ملف paginate_by يصف. إليك مثال بسيط:
من .عارضات ازياء يستورد بريد
من django.views.generic يستورد عرض القائمة

فصلPostListView(عرض القائمة):
النموذج = المنشور
template_name = "blog / blog_list_view.html"
Context_object_name = 'صفحة'
paginate_by = 2

العرض أعلاه هو النسخة المستندة إلى الفئة من العرض المستند إلى الوظيفة المكتوبة مسبقًا. هذا الرأي يرث دجانغو عرض القائمة فئة ، تستخدم لسرد العناصر. يحدد منطقه بسمات مثل نموذج, اسم القالب, اسم الكائن، و paginate_by. ال paginate_by تحدد السمة عدد المنشورات المراد عرضها لكل صفحة ؛ في هذه الحالة ، 2 مشاركات.

  • بمجرد إنشاء العرض الخاص بك ، قم بتعديل ملف urls.py ملف لاستخدامه. اليك مثال بسيط:
من .الآراء يستورد PostListView

أنماط عنوان url = [
طريق(''، PostListView.as_view () ، الاسم ='عرض القائمة'),
]

  • قم بتعديل قالب HTML الخاص بك لاستخدامه page_obj من أجل ترقيم الصفحات.
 {٪ if page_obj.has_previous٪}
<أhref="؟ page = {{page_obj.previous_page_number}}"
class = "btn btn-Secondary mx-NN"> السابقأ>
{٪ إنهاء إذا ٪}

<أhref="؟ الصفحة = 1"فصل="btn btn-second">أولاًأ>

{٪ لـ num في page_obj.paginator.page_range٪}
{٪ if num == page_obj.number٪}
<فترةفصل="الصفحه الحاليه">{{عدد}}فترة>
{٪ آخر ٪}
<أhref="؟ page = {{num}}"فصل="btn btn-second mx-2">
{{عدد}}
أ>
{٪ إنهاء إذا ٪}
{٪ endfor٪}

<أhref="؟ page = {{page_obj.paginator.num_pages}}"
class = "btn btn-Secondary mx-NN">
آخر
أ>

{٪ if page.has_next٪}
<أhref="؟ page = {{page_obj.next_page_number}}"
class = "btn btn-Secondary mx-NN">
التالي
أ>
{٪ إنهاء إذا ٪}

على عكس قالب HTML للعرض المستند إلى الوظيفة ، يستخدم هذا القالب ملفات page_obj بدلاً من صفحة لتمثيل كائن الصفحة. هذا هو السلوك الافتراضي لتقسيم الصفحات المستند إلى الفئة في Django.

استخدم ترقيم الصفحات لجعل تطبيقك قابلاً للتحجيم

يقلل ترقيم الصفحات من الحمل على الخادم / قاعدة البيانات عن طريق جلب وعرض مجموعات فرعية أصغر من البيانات في وقت واحد. مع ترقيم الصفحات ، سيزداد أداء مواقع الويب الخاصة بك. يتمتع المستخدمون لديك أيضًا بتجربة جيدة عند استخدام التطبيق الخاص بك.

توفر طرق العرض المستندة إلى الفصل مزيدًا من الوقت والرمز عند مقارنتها بالعروض القائمة على الوظائف ، ولكن يمكنك استخدام أي منهما بناءً على تفضيلاتك ومواصفات المشروع.