2009-08-11 7 views
3

私はDjangoの一般的なビューを使用してブログサイトを作成しています。作成したテンプレート entry_archive_dayentry_archive_month entry_archiveおよびentry_detailはすべて機能します。一般的なビュー 'archive_year'は空白ページを生成します

しかし、entry_archive_yearはありません。代わりに、それは私がarchiveobject_list、 の代わりにlatestリストを使用していることを知っている。それは**object_list**に何の物体を見ないように見えます。単に

なしコンテンツ(ない404またはその他のエラーがある有効なページですが、それはありませんarchive_yearの場合、正しいあなたの問題を解決するために

おかげ

答えて

5

:?!

呼び出すときにmake_object_list=Trueを設定した場合archive_yearの場合、その年のオブジェクトリストはobject_listとして利用可能になります。簡単な例として、

、あなたのURLパターンが

info_dictquerysetdate_fieldを含む辞書である、

url(r'^(?P<year>\d{4}/$', 'archive_year', dict(info_dict,make_object_list=True), 
     name="entry_archive_year") 

説明に変更し

url(r'^(?P<year>\d{4})/$', 'archive_year', info_dict, name="entry_archive_year") 

のように見える場合:

汎用ビューarchive_yearにはオプションのar文章make_object_list。デフォルトではfalseに設定され、object_listが空のリストとしてテンプレートに渡されます。

make_object_list:今年のオブジェクトの完全なリストを取得してテンプレートに渡すかどうかを指定するブール値。 Trueの場合、テンプレートのこのリストはobject_listとなります。 (名前はobject_listは異なる可能性があります;下の「テンプレートコンテキスト」セクションのobject_listのドキュメントを参照してください)。デフォルトでは、これはFalseです。

これは、オブジェクトリスト全体をentry_archive_yearビューに表示したくない場合があるためです。その年の何百ものブログ投稿があり、1ページに表示するにはあまりにも多くのブログ投稿があるかもしれません。

archive_yearは、date_listをテンプレートコンテキストに追加します。これにより、その年の毎月のアーカイブページへのリンクを、エントリを持つ月間に作成することができます。

date_list:昇順で、クエリセットによると、与えられた年で使用可能なオブジェクトを持っているすべての月を表すdatetime.dateオブジェクトのリスト。

さらに詳しい情報はDjango docsです。

date_listを使用する方法の例は、以下のコメントで要求されるように:私はしました

<ul> 
    {% for month in date_list %} 

    <li><a href="/blog/{{month|date:"Y"}}/{{month|date:"b"}}> 
      {{month|date:"F"}}</a></li> 
    {% endfor %} 
</ul> 

注:

date_listを使用するには、あなたのentry_archive_yearテンプレートはこのようなものが含まれますURLをハードコード - 実際にはurl template tagを使用する方が良いでしょう。野生で使用されているdate_listの例については、Django Weblog 2009 Archiveをご覧ください。

+0

完璧!あなたの迅速で分かりやすい答えをありがとう。 urls.pyから設定を渡す方法についてはわかりませんでしたが、この例が見つかりました:http://github.com/garethr/django-train/blob/ed60ace848e39d2d007929b2316d090886887a57/src/train/urls.py フォローアップ、date_listを使った良い例へのリンクがありますか? –

+0

他に誰かが同じ問題を抱えている場合に備えてurls.pyを変更する方法を示し、 'date_list'についてもう少し詳しく書いた例を追加しました。 – Alasdair

+0

詳細な投稿とフォローアップをありがとうございました。 –

関連する問題