SpecialistOff.NET / Вопросы / Статьи / Фрагменты кода / Резюме / Метки / Помощь / Файлы

Список вопросов Печать

Алгоритм нумерации страниц на Python


Метки: python 

Ответы

RemiZOffAlex  Создано: 2016-11-19 19:29:01.723634  Обновлено: 2016-11-19 19:29:01.723634

Код

from math import ceil


class Pagination(object):

    def __init__(self, page, per_page, total_count):
        self.page = page
        self.per_page = per_page
        self.total_count = total_count

    @property
    def pages(self):
        return int(ceil(self.total_count / float(self.per_page)))

    @property
    def has_prev(self):
        return self.page > 1

    @property
    def has_next(self):
        return self.page < self.pages

    def iter_pages(self, left_edge=2, left_current=2,
                   right_current=5, right_edge=2):
        last = 0
        for num in xrange(1, self.pages + 1):
            if num <= left_edge or \
               (num > self.page - left_current - 1 and \
                num < self.page + right_current) or \
               num > self.pages - right_edge:
                if last + 1 != num:
                    yield None
                yield num
                last = num

Рендеринг

{% for page in pagination.iter_pages() %}
{% if page %}
<a href="/data?page={{ page }}">{{ page }}</a>
{% else %}
<span class=ellipsis>...</span>
{% endif %}
{% endfor %}

Ссылки

Возможно будут интересны и другие вопросы