0

我正在使用此代码进行分页,并且我希望用户的选择在整个站点中保持不变(到目前为止已解决)......现在唯一的问题是会话变量现在是永久的,直到会话通过关闭浏览器清除。另外,我怎样才能显示相邻的页面......就像在 digg 风格的 Django 分页器中一样。我无法理解如何在我的代码中实现这一点。

代码如下:

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>
4

1 回答 1

0

您可以通过启用会话来实现这一点。

我建议阅读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]]

于 2009-11-27T08:30:43.723 回答