2011-11-11 54 views
2

我正在嘗試使用包含在標準分發版本1.3中的django分頁模塊。Django分頁引發類型錯誤

當試圖加載當前由分頁控制的頁面時,如果我在uri中不包含?page =,它將引發TypeError。我以前從未遇到過這種情況,也沒有看到它發生的任何原因。

這是我目前的看法:

paginator = Paginator(mails_list, 25) # Shows 25 mails per page 

page = request.GET.get('page') 
try: 
    mails = paginator.page(page) 
except PageNotAnInteger: 
    # If page is not an integer, deliver the first page. 
    mails = paginator.page(1) 
except EmptyPage: 
    # If page is out of range (e.g. 9999), deliver last page of results 
    mails = paginator.page(paginator.num_pages) 

類型錯誤:

int() argument must be a string or a number, not 'NoneType' 

正在從上面的代碼中的第3行給出的錯誤:

mails = paginator.page(page) 

任何人面前見證了這一錯誤和/或知道如何糾正?

+0

例外PageNotAnInteger和EmptyPage不應該檢查它嗎? – 2012-02-08 18:50:16

回答

5

嘗試修改此行:

page = request.GET.get('page') 

要這樣:

page = request.GET.get('page', '1') 

的問題是你得到了一個不存在的參數。使用[]索引將導致KeyError,但get方法返回None,如果它不存在。該分銷商正在呼叫int(None),這失敗了。

get方法的第二個參數是如果密鑰不存在而不是None而返回的缺省值。我通過'1'其中int不應該失敗。

+0

工作一個夢想。感謝您的快速回答。我現在關心的是,我完全按照文檔中所說的完成了它。爲什麼這是不正常的? –

+0

@Neil:顯然你使用的是比Django安裝更新的文檔。這顯然是[在修訂16026中修復的](https://code.djangoproject.com/changeset/16026)。 – icktoofay

+0

@Neil:如果你看[上一個穩定版本的文檔](https://docs.djangoproject.com/en/1.3/topics/pagination/),你會看到它們提供了一個默認的'get'在他們的例子中。 – icktoofay

-1
get = self.request.GET 
page = int(get.get('page')) 

,您必須將字符串轉換爲int 或

page = int(request.GET.get('page')) 

你可以做到這一點。他們兩人都跑。