Files
account_store/BaseModels/paging.py
2023-11-29 16:26:00 +03:00

112 lines
5.6 KiB
Python

# -*- coding: utf-8 -*-
__author__ = 'SDE'
def get_paging_Dict(request, elements_count, next_page_els_count, from_page, to_page=None):
pages_count = elements_count / next_page_els_count
if elements_count % next_page_els_count > 0:
pages_count = pages_count + 1
pages = []
if to_page:
cur_page = to_page
else:
cur_page = from_page
# количство страниц, которое отображается в ряд (без разделенного пэйджинга)
pages_wo_separated_paging = 20
if pages_count<pages_wo_separated_paging+1:
for page in range(1,pages_count+1):
if page==1:
pages.append((page, 1))
else:
pages.append((page, page))
else:
# количество страниц при разделенном пэйджинге в начале и конце пэйджинга, которые выводятся обязательно
pages_count_for_begin_end_paging = 3
for p in range(1,pages_count_for_begin_end_paging+1):
pages.append((p,p))
# pages.append((1,1))
# pages.append((2,2))
# pages.append((3,3))
# количество страниц, которые находятся в центре разделенного пэджинга
center_pages_count = 5
# количество страниц, при котором текущая страница будет находится в непрерывном ряду
# 1 2 3 4 5 6 7 ... 1241 1242 1243
# ^
pages_count_wo_separate_for_side = pages_count_for_begin_end_paging + center_pages_count+1
if cur_page < pages_count_wo_separate_for_side:
for p in range(pages_count_for_begin_end_paging+1,pages_count_wo_separate_for_side+1):
pages.append((p,p))
mid_rigth_page = (pages_count+1-pages_count_for_begin_end_paging-pages_count_wo_separate_for_side) / 2 #считаем сколько страниц внутри точек
mid_rigth_page = pages_count_wo_separate_for_side + mid_rigth_page # это и есть средняя страница в правой части
pages.append((u'...',mid_rigth_page))
# if num_current_page < 7:
# pages.append((4,4))
# pages.append((5,5))
# pages.append((6,6))
# pages.append((7,7))
# mid_rigth_page = (pages_count -2 -7) / 2 #считаем сколько страниц внутри точек
# mid_rigth_page = 7 + mid_rigth_page # это и есть средняя страница в правой части
# pages.append((u'...',mid_rigth_page))
elif cur_page>pages_count+1-pages_count_wo_separate_for_side:
mid_left_page = (pages_count+1-pages_count_for_begin_end_paging-pages_count_wo_separate_for_side) / 2 #считаем сколько страниц внутри точек
mid_left_page = pages_count_for_begin_end_paging + mid_left_page # это и есть средняя страница в левой части
pages.append((u'...',mid_left_page))
for p in range(pages_count+1-pages_count_wo_separate_for_side,pages_count-pages_count_for_begin_end_paging+1):
pages.append((p,p))
# elif num_current_page>pages_count-6:
# mid_left_page = (pages_count -2 -7) / 2 #считаем сколько страниц внутри точек
# mid_left_page = 3 + mid_left_page # это и есть средняя страница в левой части
# pages.append((u'...',mid_left_page))
# pages.append((pages_count-6,pages_count-6))
# pages.append((pages_count-5,pages_count-5))
# pages.append((pages_count-4,pages_count-4))
# pages.append((pages_count-3,pages_count-3))
else:
mid_page = cur_page
mid_left_page = (mid_page-1 -pages_count_for_begin_end_paging)/2 + pages_count_for_begin_end_paging
mid_rigth_page = (pages_count - (mid_page+pages_count_for_begin_end_paging))/2 + mid_page+1
# количество страниц, которые добавляются слева и и справа от текущей центральной
pages_count_for_add_to_left_and_right_from_current_central_page = center_pages_count / 2
pages.append((u'...',mid_left_page))
for p in range(mid_page-pages_count_for_add_to_left_and_right_from_current_central_page,mid_page+pages_count_for_add_to_left_and_right_from_current_central_page+1):
pages.append((p,p))
pages.append((u'...',mid_rigth_page))
# mid_left_page = (mid_page-1 -3)/2 + 3
# mid_rigth_page = (pages_count - (mid_page+1 +2))/2 + mid_page+1
#
# pages.append((u'...',mid_left_page))
# pages.append((mid_page-1,mid_page-1))
# pages.append((mid_page,mid_page))
# pages.append((mid_page+1,mid_page+1))
# pages.append((u'...',mid_rigth_page))
for p in range(pages_count+1-pages_count_for_begin_end_paging,pages_count+1):
pages.append((p,p))
# pages.append((pages_count-2,pages_count-2))
# pages.append((pages_count-1,pages_count-1))
# pages.append((pages_count,pages_count))
if not to_page:
to_page = from_page
return {
'paging' : pages,
'from_page' : from_page,
'to_page' : to_page,
'max_page' : pages_count,
}