112 lines
5.6 KiB
Python
112 lines
5.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
__author__ = 'SDE'
|
|
|
|
def get_paging_Dict(request, elements_count, elements_on_page, from_page, to_page=None):
|
|
|
|
|
|
|
|
pages_count = elements_count / elements_on_page
|
|
if elements_count % elements_on_page > 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,
|
|
}
|