だけfrom django.core.paginator import Paginator
と他のどこでも、ホームページ用のビューでp = Paginator(thestuff, 7)
、p = Paginator(thestuff, 10)
とページネータオブジェクトを作ります。どちらの場合でも、テンプレートをレンダリングするコンテキストでバインドp
をバインドします。 p.object_list
はどちらの場合でも適切に設定されます(そして、あなたが使用しているアプローチであると言われるでしょうか?つまり、 "Djangoのobject_list"の意味ですか?
ジャンゴdocsは(あなたが1.0以上にしていると仮定)は、優れた詳細と例があります。それを動作させることができない場合は、あなたのテンプレートとビューコードの私たち(まだ失敗した単純なバージョン)を表示できますか?
編集:問題は今、明確に示されていると、私は次のように、Djangoのコアページネータをサブクラス化することによって解決されるべきだと思う:
from django.core.paginator import Paginator, Page
class MyPaginator(Paginator):
def __init__(self, **kw):
self.deltafirst = kw.pop('deltafirst', 0)
Paginator.__init__(self, **kw)
def page(self, number):
"Returns a Page object for the given 1-based page number."
number = self.validate_number(number)
if number == 1:
bottom = 0
top = self.per_page - self.deltafirst
else:
bottom = (number - 1) * self.per_page - self.deltafirst
top = bottom + self.per_page
if top + self.orphans >= self.count:
top = self.count
return Page(self.object_list[bottom:top], number, self)
は、今まさに上記のテキストおよび例としてMyPaginatorを使用するには、Djangoの独自の使用方法を示してただし、最初のページ3をページあたりの通常の長さ(10)よりも短くするには、追加の名前付き引数deltafirst=3
を使用します。したがって、最初のページ3を他のページより短くするには、名目上の長さが10で、デルタファーストで3の単一のページジェネレータを使用します。
(validate_number
に問題があるかもしれませんが、私はそれらが出現するかどうかはわかりません。もしそうであれば、MyPaginatorもその方法を上書きする必要があります)。
こんにちはアレックス。提案していただきありがとうございますが、問題があります。時間がある場合は、http://pastie.org/527183をご覧ください。提案した方法に似た方法を使用すると、何が起こるかがわかります。基本的に、Djangoは適切な量のページを設定しますが、2ページ目には1ページ目に表示されていると思われる行が残っています。申し訳ありませんが説明するのは難しいですが、Pastieのリンクから理解してください。誰でもこれを解決する方法がありますか? – user116170
そうですね、ペストリーのリンクを見て、それは意味をなさない - 私は1つの解決策(Django 1.0のコアPaginatorの微調整されたサブクラス)を提供するために私の答えを編集しました。 –
パーフェクト!それを書く時間をとってくれてありがとう。ジョー。 – user116170