سؤال

أنا أستخدم هذا الرمز لترقيم ترجمتي ، وأود أن يكون اختيار المستخدم ثابتًا في جميع أنحاء الموقع (تم حل هذا حتى الآن) ... المشكلة الوحيدة الآن هي أن متغير الجلسة الآن دائم حتى الجلسة تم مسحه عن طريق إغلاق المتصفح. أيضًا ، كيف يمكنني عرض الصفحات المجاورة ... كما هو الحال في Django Paginator على غرار Digg. لم أتمكن من فهم كيفية تنفيذ هذا في الكود الخاص بي.

رمز على النحو التالي:

from django.core.paginator import Paginator, InvalidPage, EmptyPage

def paginate(request, object_list, paginate_by=10):
   try:
      if "per_page" in request.session:
        per_page = request.session["per_page"]
      else:
        request.session["per_page"] = int(request.REQUEST['p'])
        per_page = request.session["per_page"]
        request.session.set_expiry(0)
   except:
      per_page = 10

   paginator = Paginator(object_list, per_page)

   try:
      page = int(request.GET.get('page', '1'))
   except ValueError:
      page = 1

   try:
      items = paginator.page(page)
   except (EmptyPage, InvalidPage):
      items = paginator.page(paginator.num_pages)

   return items

ثم في القالب الخاص بي ، لدي هذا لتقديم روابط ترقيم الصفحات:

<div class="pagination" align="center"> 
 <span class="step-links"> 
  {% if items.has_previous %} 
    <a href="?page={{ items.previous_page_number }}">previous</a> 
  {% endif %} 
  <span class="current"> 
    Page {{ items.number }} of {{ items.paginator.num_pages }} 
  </span> 
  {% if items.has_next %} 
    <a href="?page={{ items.next_page_number }}">next</a> 
  {% endif %} 
 </span> 
</div>
هل كانت مفيدة؟

المحلول

يمكنك تحقيق ذلك عن طريق تمكين الجلسات.

أوصي القراءة من خلال الفصل الجلسات والمستخدمين والتسجيل على موقع Djangobook.


تحرير: الآن بعد أن قمت بتمكين الجلسات ، أعتقد أن المشكلة هي الارتباطات التشعبية في القالب. استخدم ampersand لفصل معلمات متعددة في عنوان URL ، على سبيل المثال

 <a href="?p={{ request.session.per_page }}&page={{ items.next_page_number }}">next</a> 

تحرير 2: لست متأكدًا مما إذا كنت أفهم ما هي المشكلة في انتهاء صلاحية الجلسة. الخط الذي يضع الجلسة لتنتهي عند إغلاق المتصفح request.session.set_expiry(0). انظر مستندات Django على استخدام الجلسات في وجهات النظر إذا كنت تريد تغيير ذلك.

لعمل Paginator على نمط Digg ، تحتاج إلى كتابة وظيفة تأخذ رقم الصفحة الحالي وعدد الصفحات الإجمالية ، وإرجاع قائمة أرقام الصفحات. ثم ، في القالب ، حلقة من خلال أرقام الصفحة وبناء روابط إلى الصفحات.

ستتيح لك قائمة قوائم أرقام الصفحات تقسيم أرقام الصفحات إلى مجموعات ، على سبيل المثال

[[1,2], [20,21,22,23,24], [30,31]]

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top