10

ユーザーがアシスタントのリストに表示するページごとの項目数を選択できるようにする必要があります。Django 1.4 で一般的な ListView を使用しています。

この変更前の私のコードは次のようになります。

Class AssistantList(ListView):
    template_name = "register/assistant_list.html"
    context_object_name = 'assistant_list'
    paginate_by = 25

上記のようにハードコーディングする代わりに、ユーザーの選択に基づいて paginate_by を動的に設定するにはどうすればよいですか?

4

1 に答える 1

19

私は最近これをしなければなりませんでした。get_paginate_by 関数をオーバーライドして、クエリ文字列パラメーターを取得できます。これが基本的な例です。

Class AssistantList(ListView):
    template_name = "register/assistant_list.html"
    context_object_name = 'assistant_list'
    paginate_by = 25

    def get_paginate_by(self, queryset):
        """
        Paginate by specified value in querystring, or use default class property value.
        """
        return self.request.GET.get('paginate_by', self.paginate_by)

次に、HTML には、ユーザーが表示するアイテムの数を選択できるドロップダウン選択があります。

<form action="." method="get">
    <select name="paginate_by">
        <option>25</option>
        <option>50</option>
        <option>75</option>
        <option>100</option>
    </select>
</form>

自動送信するようにいくつかの JavaScript を追加しました。paginate_by をコンテキストに渡し、ページからページへと引き続き渡されるようにする必要があります。

于 2013-02-06T02:13:27.470 に答える