یکی از مشکلاتی که در paginate کردن صفحات جنگو به صورت عددی هست اینه که مثلا شما یه لیست رو در تمپلیت برمیگردونی و در انتهای صفحه چند عدد قرار میدی که نشون میده باید کاربر برای دیدن ادامه مطالب به صفحات بعد مراجعه کنه و بعد کاربر روی صفحه دو میزنه و بعد سه و الی آخر...
حالا اگه تعداد پستهای ما زیاد بشه چی کار باید کرد؟ چون اینجوری باعث میشه تعداد خیلی زیادی از عدد صفحات به نمایش در بیاد( مثلا از 1 تا 500)
خب حالا راه حل چیه؟
توی تمپلیت از کد زیر باید استفاده کرد...
{% if is_paginated %}
<ul class="pagination">
{% if page_obj.has_previous %}
<li><a href="{% url 'payments:charge_list' page_obj.previous_page_number %}">«</a></li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %}
{% for i in paginator.page_range %}
{% if page_obj.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% elif i > page_obj.number|add:'-3' and i < page_obj.number|add:'3' %}
<li><a href="{% url 'payments:charge_list' i %}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li><a href="{% url 'payments:charge_list' page_obj.next_page_number %}">»</a></li>
{% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
{% endif %}
نکته اصلی توی این قسمته:
{% elif i > page_obj.number|add:'-3' and i < page_obj.number|add:'3' %}
این کار باعث میشه فقط دو عدد صحه قبل و دو عدد صفحه بعد نمایش داده بشه یعنی به این شکل:
راه حل های دیگری هم هست که خوشحال میشم اونارو در کامنت با من در میون بزارید.