Пагинация не работает для промежуточных чисел, а также для обратных в django
Я фильтрую данные, а также применяю пагинатор, я нашел решение и использовал его, но оно работает только для следующей кнопки, а не для предыдущей и номеров кнопок между ними, т.е. для {{i}}. (Django, python)
это файл template_tag myapp_extra.py
from django import template
register = template.Library()
@register.simple_tag
def my_url(value, field_name, urlencode=None):
url = '?{}={}'.format(field_name, value)
if urlencode:
querystring = urlencode.split('&')
filterd_querystring = filter(lambda p: p.split('=')[0]!=field_name, querystring)
encoded_querystring = '&'.join(filterd_querystring)
url = '{}&{}'.format(url, encoded_querystring)
return url
в моем html
{% load myapp_extra %}
<other code>
<nav>
<ul class="pagination rounded-separated justify-content-center" style="float: right; margin-top: 1%;">
{% if employees_attendance_list.has_previous %}
<li class="page-item"><a class="page-link" href="{% my_url employees_attendance_list.previous_page_number 'page' request.GET.urlencode }"><i class="mdi mdi-chevron-left"></i></a></li>
{% else %}
<li class="disabled"></li>
{% endif %}
{% for i in employees_attendance_list.paginator.page_range %}
{% if employees_attendance_list.number == i %}
<li class="page-item active"><a class="page-link" >{{ i }}</a></li>
{% else %}
<li class="page-item"><a class="page-link" href="{% my_url i 'page' request.GET.urlencode}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if employees_attendance_list.has_next %}
<li class="page-item"><a class="page-link" href="{% my_url employees_attendance_list.next_page_number 'page' request.GET.urlencode %}"><i class="mdi mdi-chevron-right"></i></a></li>
{% else %}
<li class="disabled"></li>
{% endif %}
</ul>
</nav>
в просмотрах
page = request.GET.get('page', 1)
paginator = Paginator(employees_attendance, settings.PAGE_LIMIT)
try:
employees_attendance_list = paginator.page(page)
except PageNotAnInteger:
employees_attendance_list = paginator.page(1)
except EmptyPage:
employees_attendance_list = paginator.page(paginator.num_pages)
Я внес некоторые изменения в свой html
<nav>
<ul class="pagination rounded-separated justify-content-center" style="float: right; margin-top: 1%;">
{% for i in employees_attendance_list.paginator.page_range %}
<li class="page-item">
<a class="page-link" href="{% my_url i 'page' request.GET.urlencode %}">{{ i }}</a>
</li>
{% endfor %}
</ul>
</nav>