3

私はDjangoのクラスベースのビューを試していて、今のところ気に入っていますが、YearArchiveViewで何も得られません。これが私のクラスです:

class ThoughtsByYearView(YearArchiveView):
    template_name = "thoughts/index_by_year.html"
    queryset = Thought.objects.published()
    date_field = 'pub_date'
    context_object_name = 'thought_list'

と私のurls.py:

urlpatterns = patterns('thoughts.views',
    url(r'^$', ThoughtsIndexView.as_view(), name='thoughts'),
    url(r'^(?P<year>\d{4})/$', ThoughtsByYearView.as_view(), name='thoughts_year'),
)

両方ともthought_listobject_listのリストとして返されます。再定義get_querysetしても何も起こりません。ThoughtsIndexView正しいオブジェクトを返すので、それは私が犯しているばかげた間違いだと確信しています。誰か教えてもらえますか?

ああ、これが失敗したテストケースです:(編集:ブラウザでの結果は同じです。戻り値はありません)

def test_thoughts_by_year_has_thoughts(self):
    response = self.client.get(reverse('thoughts_year', args=[datetime.now().year]))
    thoughts_by_year = response.context_data['thought_list']
    self.assertGreater(len(thoughts_by_year), 0)
4

3 に答える 3

4

それ初心者の間違いでした。make_object_list私はクラスで指定していませんでした。このコミットでどのように修正されるかを確認できます。

ドキュメントから:

make_object_list

今年のオブジェクトの完全なリストを取得してテンプレートに渡すかどうかを指定するブール値。Trueの場合、オブジェクトのリストがコンテキストで使用できるようになります。デフォルトでは、これはFalseです。

したがって、そのオプションが存在する理由はわかりませんが、存在します。デフォルトで何も返さないことは私にはあまり意味がありません(おそらくページ付けのことですか?)

于 2011-04-20T18:46:22.757 に答える
1

あなたはすでに問題を解決しましたが、なぜそのオプションが存在するのかについてのあなたの質問に答えるために、ドキュメントは次のように述べています:

特定の年に利用可能なすべての月を表示する年次アーカイブページ。

...テンプレートのコンテキストは次のようになります。

  • date_list:クエリセットに従って使用可能なオブジェクトを持つすべての月を含むDateQuerySetオブジェクトで、datetime.datetimeオブジェクトとして昇順で表されます。

クラスベースのビューは難しいので、ドキュメントを注意深く読み、ソース(ほとんど)に飛び込み、デバッグ手法django.views.genericに精通して、ほとんどのビューで行われているわずかに絡み合った継承の山をステップスルーする価値があります。

于 2012-04-16T16:54:57.183 に答える
0

うん。仰るとおりです。私は現在、このクラスベースのジェネリックビューの独自の実装を機能させていますが、それが「政治的に正しい」かどうかに興味があります。とにかく、この汎用ビューをどのように使用できるかについては非常に重要であり、この(make_object_list)属性は、コーダーがいじくり回すために使用できるオプションであると考えました。

于 2011-05-04T00:02:54.207 に答える