2011-11-11 31 views
2

標準配布バージョン1.3を含むdjangoページ分割モジュールを使用しようとしています。Django Paginator raise TypeError

現在ページネーションによって制御されているページを読み込もうとしているときに、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) 

はTypeError:

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

エラーは、上記のコードの行3から提示されている:

mails = paginator.page(page) 

誰もが前にこのエラーを目撃しましたそれを修正する方法を知っていますか?

+0

例外はPageNotAnIntegerとEmptyPageでチェックしないでください。 –

答えて

5

は、この行を変更してみてください:

これに
page = request.GET.get('page') 

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

問題は存在しないパラメータを取得しているです。 []を使用してインデックスを作成すると、KeyErrorが返されますが、getメソッドは存在しない場合はNoneを返します。ページネイターはint(None)を呼び出していますが、失敗します。

getメソッドの2番目のパラメータは、Noneではなくキーが存在しない場合に返されるデフォルトです。私は'1'を渡しましたが、それはintが失敗してはいけません。

+0

作品は夢です。迅速な答えをありがとう。私の懸念は今、私は文書の中に描かれているように正確に行っています。なぜこれがうまくいかないのですか? –

+0

@ Neeil:あなたのDjangoインストールより新しいドキュメントを使用しているようです。これは明らかに[改訂16026で修正されました](https://code.djangoproject.com/changeset/16026)。 – icktoofay

+0

@ Neeil:[最後の安定バージョンのドキュメント](https://docs.djangoproject.com/en/1.3/topics/pagination/)を見ると、デフォルトで 'get'彼らの例では。 – icktoofay

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

あなたは、あなたがそれを行うことができます または

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

をintに文字列を変換する必要があります。両方とも実行されます。

関連する問題