Django概要サンプルモデルサンプルテンプレート全てのビューでカテゴリ一覧を作るcontext_processorsを使うテンプレートタグを使う概要Webサイトでは、全てのページに配置したい情報が出てきます。サイドバーのカテゴリ一覧とか、ヘッダー内にあるサイト内検索といったコンテンツです。私の日記帳ではサイドバーにカテゴリがありますが、これはどのページに行っても表示されます。このブログだと、上部にサイト内検索がありますね。これもどのページに行っても表示されます。これらは、Category.objects.all()とかSearchForm(request.GET)みたいな感じで作っています。毎回テンプレートファイルへこれらのオブジェクトを渡す必要があるのです。今回はカテゴリ一覧を毎回テンプレートファイルへ渡すように実装していきます。サンプルモデル次のようなモデルがあるとします。self.titleブログっぽいモデルです。記事があり、記事はカテゴリを指定できます。このカテゴリを、全てのページのサイドバーにでも表示をしていきたいとします。サンプルテンプレートテンプレートファイルを用意します。開発時は、全てのページに共通となるベーステンプレートファイルを作ることが多く、他のテンプレートファイルはこのベーステンプレートを継承することになります。どのページにも表示したいデータ...今回ならばカテゴリ一覧は、ベーステンプレートファイルで定義することになるでしょう。base.htmlといった名前で、次のようなものを作っておきます。--></aside></body></html>main要素は、メインコンテンツですね。%}としておいて、他のテンプレートファイルで上書きできるようにしています。今回重要なのはaside要素の中で、ここにカテゴリの一覧を定義したいのですが、それをどうやって書くか?というのが主題です。全てのビューでカテゴリ一覧を作る1つ目の方法は、全てのビューからテンプレートファイルへカテゴリ一覧を渡す方法です。クラスベースビューならば、次のような感じでテンプレートファイルへ渡すデータを追加できます。contextbase.htmlでは、次のようにしてカテゴリを取り出せます。</ul></aside>全てのビューに手作業で追加するのが大変なので、よくやるのが、次のようなMixinを作ることです。contextそして、このMixinをすべてのビューで継承します。次のような感じですね。Postこの方法は、どうしてもビュー側のコードが増えます。そのアプリケーション内の、一部のビューにだけ適用したいといった場合には非常に有効ですが、全てのビューに適用したい場合は、他の方法もあります。context_processorsを使うまず、settings.pyに次のコードを追加します。},]アプリケーション内に、context_processors.pyを作ります。views.pyとかと同じ階層です。中身は、次のようにします。contextテンプレートファイルは、先ほどと同様です。</ul></aside>これも上手く動作します。この方法は、Djangoプロジェクト内の全てのアプリケーションを含む、全てのテンプレートファイルへデータを渡したい場合に有効です。全てのDjangoあぷりけーしょんに適用されるので、場合によっては大げさに感じるでしょう。テンプレートタグを使うまず、アプリケーションのディレクトリ内にtemplatetagsディレクトリを作り、中にapp_tags.pyというファイルを作ります。ファイル名は、好きなもので大丈夫です。中身は次のようにします。}register.inclusion_tagデコレータを使うと、そのテンプレートタグの内容をテンプレートファイルを使って表示できます。上のコードならば、Category.objects.all()をcategory_listという名前で、app/includes/category_links.htmlに渡せるということです。app/includes/category_links.htmlは、次のような感じにしておきます。今までbase.htmlに書いていた内容を、移動させるだけです。%}</ul>後は、このテンプレートタグをbase.html側で呼び出すだけです。%}</aside>この方法は結構柔軟なので、個人的にはオススメです。ビューが見づらくなる訳でもなく、使いたい場所にだけ使えます。PostsDjangoで、月別アーカイブ欄を作るDjangoで、ブログや日記によくある月別アーカイブ欄を作成していきます。Django日記の月別アーカイブ、カテゴリ一覧、検索フォーム作成Djangoで、日記を作るシリーズ1の1つです。フッター内にある、月別アーカイブやカテゴリ一覧、検索フォームの部分を作成していきます。週間前udemy受講者です。カテゴリ一覧の表示について悩んでいたところなので、助かりました。表示してみたいと思います。今後ともブログ応援しております。返信する幾つかの方法で、ブログの更新を受け取れます。