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 Webサイトの「セッション、ユーザー、登録」の章を読むことをお勧めします。


編集:セッションを有効にしたので、問題はテンプレートのハイパーリンクにあると思います。たとえば、アンパサンドを使用して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 に答える