|
|
|
|
@ -9,14 +9,15 @@ from commons.utils import safe_int |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# допустимые значения `per_page` |
|
|
|
|
_ALLOW_PER_PAGE = (10, 20, 50, 75, 100,) # по умолчанию |
|
|
|
|
# по умолчанию |
|
|
|
|
_ALLOW_PER_PAGE = (10, 20, 50, 75, 100,) |
|
|
|
|
ALLOW_PER_PAGE = getattr(settings, 'ALLOW_PER_PAGE', _ALLOW_PER_PAGE) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaginationForm(forms.Form): |
|
|
|
|
"""Форма для пагинатора со списком допустимых значений `per_page`.""" |
|
|
|
|
per_page = forms.ChoiceField(label=u'записей на странице', choices=zip(ALLOW_PER_PAGE, ALLOW_PER_PAGE), |
|
|
|
|
required=False) |
|
|
|
|
per_page = forms.ChoiceField(label=u'записей на странице', |
|
|
|
|
choices=zip(ALLOW_PER_PAGE, ALLOW_PER_PAGE), required=False) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def save_per_page_value(func): |
|
|
|
|
@ -32,7 +33,8 @@ def save_per_page_value(func): |
|
|
|
|
per_page = safe_int(request.POST[key]) |
|
|
|
|
if per_page in ALLOW_PER_PAGE: |
|
|
|
|
if hasattr(output, 'set_cookie'): |
|
|
|
|
max_age = 365*24*60*60 # год |
|
|
|
|
# год |
|
|
|
|
max_age = 365 * 24 * 60 * 60 |
|
|
|
|
output.set_cookie(key, per_page, max_age) |
|
|
|
|
return output |
|
|
|
|
return wrapper |
|
|
|
|
@ -60,7 +62,8 @@ def pagination(request, object_list, page_num=None, form_class=PaginationForm): |
|
|
|
|
"""Создает и возвращает объект django.core.paginator.Paginator и, |
|
|
|
|
если form_class!=None, форму со списком допустимых значений `per_page`. |
|
|
|
|
""" |
|
|
|
|
per_page = get_per_page_value(request) # кол-во записей на странице |
|
|
|
|
# кол-во записей на странице |
|
|
|
|
per_page = get_per_page_value(request) |
|
|
|
|
# пагинатор |
|
|
|
|
paginator = Paginator(object_list, per_page) |
|
|
|
|
page_num = max(1, safe_int(page_num, 1)) |
|
|
|
|
@ -71,5 +74,5 @@ def pagination(request, object_list, page_num=None, form_class=PaginationForm): |
|
|
|
|
# форма |
|
|
|
|
form = None |
|
|
|
|
if form_class: |
|
|
|
|
form = PaginationForm(initial={'per_page': per_page,}) |
|
|
|
|
form = PaginationForm(initial={'per_page': per_page}) |
|
|
|
|
return objects, form |
|
|
|
|
|