2009-11-27 82 views
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> 

回答

0

您可以通過啓用會話實現這一目標。

我推薦閱讀djangobook網站上的章節Sessions, Users, and Registration


編輯:現在您已啓用會話,我認爲問題是模板中的超鏈接。使用的符號,以多個參數中的URL分開,例如

<a href="?p={{ request.session.per_page }}&page={{ items.next_page_number }}">next</a> 

編輯2:我不知道,如果我知道這個問題是與會話過期的東西。設置會話在瀏覽器關閉時過期的行是request.session.set_expiry(0)。如果你想改變它,請參閱Using Sessions in views上的django文檔。

要創建一個Digg風格的分頁器,您需要編寫一個函數,該函數採用當前頁碼和總頁數,並返回頁碼列表。然後,在模板中循環瀏覽頁碼並構建頁面鏈接。

頁號碼清單將使你的頁面數分成組的列表,如

[[1,2], [20,21,22,23,24], [30,31]]

+0

也這麼認爲......只是想知道,如果沒有任何其他手段 – Stephen 2009-11-27 09:13:40

+0

我已經嘗試了上面的代碼,但是我必須得到錯誤的東西......現在分頁不起作用(除了第一頁)...我錯過了或遺漏了什麼 – Stephen 2009-11-27 13:00:26

+0

我看不到你的代碼現在。如果您將問題標記爲未回答(點擊綠色勾號),並編輯您的問題以解釋您嘗試執行的操作,則可能會得到其他人的更多關注。 – Alasdair 2009-11-27 16:27:18