0

日付ベースの一般的なビューのページ付けを取得するために、Django1.3に切り替えました。これは問題なく機能しますが、特定の数のアイテムが必要であるが、ページ付けされたくないページがあります。たとえば、最初の5つのニュースエントリを返します。

1.2では、最新のアイテムを取得するために情報辞書に入れることができるnum_latestがありました。これは、新しいクラスベースのジェネリックビューには存在しないようです。

paginate_byを5に設定し、テンプレートのページネーションリンクを使用しないようにすることもできますが、URLを手動でパンチすることで、古いエントリを表示できます(これは不要です)。さらに、使用しないページネーションをDjangoに設定させたくありません。

編集:これは私が現在使用しているurlconf行です:

url(r'^$', 
    ArchiveIndexView.as_view(
        model = Entry,
        context_object_name = 'entry_list',
        template_name = 'news/news.html',
        date_field = 'published',
    ), name = 'archive_index'
),

さらに編集:get_dated_querysetをオーバーライドしようとしています上記のようにurlconfと組み合わせてこのコードを使用しましたが、次のような新しいビューを使用しました。

class MainIndex(ArchiveIndexView):
    def get_dated_queryset(self):
        return Entry.objects.all()[:2]

コメントで述べたのとほぼ同じエラーが発生します。スライスが取得されると、クエリを並べ替えることができません。

4

2 に答える 2

3

代わりにこれをオーバーライドしてみてください:

def get_dated_items(self):
    date_list, items, extra_context = super(MainIndex, self).get_dated_items()
    return (date_list, items[:2], extra_context)
注:この実装では、クエリセットがスライスされた後date_list、クエリセットとの整合性が失われる可能性があります。itemsそれを修正するには、あなたも再生する必要があると思いますdate_list。詳細については、SVNでのBaseArchiveIndexView.get_dated_itemsの実装を参照してください:http://code.djangoproject.com/browser/django/trunk/django/views/generic/dates.py。このようなものが機能する可能性があります
def get_dated_items(self):
    date_list, items, extra_context = super(MainIndex, self).get_dated_items()
    items = items[:2]
    date_list = self.get_date_list(items, 'year')
    if not date_list:
        items = items.none()
    return (date_list, items, extra_context)
が、これがなくても機能する場合は、見た目が乱雑なので触れません。

于 2011-09-12T02:11:56.110 に答える
0

私はこの正確な問題に自分で遭遇しました。これに(ArchiveIndexViewの代わりに)ListViewを使用すると、時間と手間が省けることがわかりました。

コードの最初のチャンクの場合、違いは次のようになります。

from django.views.generic import ListView


url(r'^$', 
    ListView.as_view(
        model = Entry,
        context_object_name = 'entry_list',
        template_name = 'news/news.html',
        queryset=Entry.objects.all().order_by("-published")[:2],
    ), name = 'archive_index'
),
于 2013-07-26T21:20:48.247 に答える