Проблема нумерации страниц
-
05-07-2019 - |
Вопрос
Я использую этот код для своей нумерации страниц, и я хотел бы, чтобы выбор пользователя был постоянным на всем сайте (это было решено до сих пор) ... единственная проблема сейчас заключается в том, что переменная сеанса теперь является постоянной пока сеанс не будет очищен закрытием браузера. Кроме того, как я могу отобразить соседние страницы ... как в стиле Django в стиле digg. Я не смог понять, как внедрить это в мой код.
Код выглядит следующим образом:
from django.core.paginator import Paginator, InvalidPage, EmptyPage
def paginate(request, object_list, paginate_by=10):
try:
if "per_page" in request.session:
per_page = request.session["per_page"]
else:
request.session["per_page"] = int(request.REQUEST['p'])
per_page = request.session["per_page"]
request.session.set_expiry(0)
except:
per_page = 10
paginator = Paginator(object_list, per_page)
try:
page = int(request.GET.get('page', '1'))
except ValueError:
page = 1
try:
items = paginator.page(page)
except (EmptyPage, InvalidPage):
items = paginator.page(paginator.num_pages)
return items
Тогда в моем шаблоне есть рендеринг ссылок на страницы:
<div class="pagination" align="center">
<span class="step-links">
{% if items.has_previous %}
<a href="?page={{ items.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ items.number }} of {{ items.paginator.num_pages }}
</span>
{% if items.has_next %}
<a href="?page={{ items.next_page_number }}">next</a>
{% endif %}
</span>
</div>
Решение
Этого можно добиться, включив сеансы.
Я рекомендую прочитать главу Сессии, пользователи и регистрация веб-сайт djangobook.
<Ч>Изменить. Теперь, когда вы включили сеансы, я думаю, что проблема заключается в гиперссылках в шаблоне. Используйте амперсанд для разделения нескольких параметров в URL, например
<a href="?p={{ request.session.per_page }}&page={{ items.next_page_number }}">next</a>
<Ч>
Изменить 2. Я не уверен, что понимаю, в чем проблема с истечением срока действия сессии. Строка, которая устанавливает время окончания сеанса при закрытии браузера: request.session.set_expiry (0)
. См. Документы django по использованию сеансов в представлениях. если вы хотите это изменить.
Чтобы создать страницу в стиле Digg, вам нужно написать функцию, которая принимает текущий номер страницы и общее количество страниц и возвращает список номеров страниц. Затем в шаблоне прокрутите номера страниц и создайте ссылки на страницы. Р>
Список списков номеров страниц позволит вам разбить номера страниц на группы, например
[[1,2], [20,21,22,23,24], [30,31]]