Форум сайта python.su
Ну а где же писать логику отображения?
Офлайн
WalinoRМогу подкинуть как сделано у меня. У меня в пагинаторе отображается 4 страницы назад от текущей и 4 вперед от текущей.
Я понял, но если я так напишу и у меня допустим будет 100 страниц. То на сайте у меня будет 100 кнопок подряд для переключения страниц. Так вот где мне тогда написать логику, чтобы организовать такой переключатель, как я показал в предыдущем посте (ну или как на данном форуме). В шаблоне?
from django.core.paginator import Paginator, Page
class MyPage(Page):
def range_before(self):
i = self.number - 4
if i <= 0:
i = 1
return range(i, self.number)
def range_after(self):
b = self.number + 1
e = b + 4
if e > self.paginator.num_pages:
e = self.paginator.num_pages + 1
return range(b, e)
class MyPaginator(Paginator):
def _get_page(self, *args, **kwargs):
return MyPage(*args, **kwargs)
from common.paginator import MyPaginator
class MyListView(ListView):
paginator_class = MyPaginator
paginate_by = PAGINATE_BY
context_object_name = 'albums'
sort_by_list = {
'id': 'Дата',
'hits': 'Просмотры',
#'comments': 'Комментарии'
}
def get_order(self):
self.sort_by = self.request.GET.get('sort_by', 'id')
if self.sort_by in self.sort_by_list:
return '-{}'.format(self.sort_by)
else:
self.sort_by = 'id'
return '-id'
def get_context_data(self, **kwargs):
context = super(MyListView, self).get_context_data(**kwargs)
if self.sort_by != 'id':
context['sort_by_param'] = 'sort_by={}&'.format(self.sort_by)
context['sort_by_name'] = self.sort_by_list[self.sort_by]
context['sort_by_list'] = self.sort_by_list
return context
class AlbumsList(MyListView):
template_name = 'albums/albums_list.html'
def get_queryset(self):
return Album.objects.order_by(self.get_order())
{% if is_paginated %}
{% autoescape off %}
<ul class="pagination">
{% if page_obj.has_previous %}
<li>
<a href="?{{ sort_by_param }}page=1">
<span>Первая</span>
</a>
</li>
<li>
<a href="?{{ sort_by_param }}page={{ page_obj.previous_page_number }}">
<i class="icon-angle-left"></i>
</a>
</li>
{% for num in page_obj.range_before %}
<li>
<a href="?{{ sort_by_param }}page={{ num }}">{{ num }}</a>
</li>
{% endfor %}
{% endif %}
<li class="active">
<a href="#">{{ page_obj.number }}</a>
</li>
{% if page_obj.has_next %}
{% for num in page_obj.range_after %}
<li>
<a href="?{{ sort_by_param}}page={{ num }}">{{ num }}</a>
</li>
{% endfor %}
<li>
<a href="?{{ sort_by_param }}page={{ page_obj.next_page_number }}">
<i class="icon-angle-right"></i>
</a>
</li>
<li>
<a href="?{{ sort_by_param }}page=last">
<span>Последняя</span>
</a>
</li>
{% endif %}
</ul>
{% endautoescape %}
{% endif %}
Офлайн
Спасибо за пример. сделал по аналогии, только с моим “видом” пагинации)))
Офлайн