Webアプリケーションのサイドバーを作成したいと思います。次のコンテンツが含まれています。
- 検索バー
- タグのリスト
- 最近の投稿へのリンク(年と月を含む)
このサイドバーをすべてのサイト/ビューに含めたいと思います。だから私の最初の推測は、それがレイアウトに属するだろうということです。しかし、それは動的でもあり、私が知る限り、レイアウトは静的です。
ビュー/レイアウトの冗長性を回避し、すべてのサイトにサイドバーを配置するにはどうすればよいですか?
Webアプリケーションのサイドバーを作成したいと思います。次のコンテンツが含まれています。
このサイドバーをすべてのサイト/ビューに含めたいと思います。だから私の最初の推測は、それがレイアウトに属するだろうということです。しかし、それは動的でもあり、私が知る限り、レイアウトは静的です。
ビュー/レイアウトの冗長性を回避し、すべてのサイトにサイドバーを配置するにはどうすればよいですか?
コンテキストデータを複数のテンプレートに渡すには、djangoにさまざまなオプションがあります。次のいずれかを実行できます。
関連するデータを取得してレンダリングし、必要なすべてのテンプレートで再利用できるテンプレートタグを作成します(または、ベーステンプレートに挿入して、テンプレートの継承を使用します)。
コンテキストプロセッサを使用する:すべてのリクエストで呼び出され、を使用するすべてのビューのコンテキストにデータを追加しますRequestContext
。
Djangoのクラスベースのビューを使用すると、コンテキストにデータを追加するベースビューからすべてのビューを継承させることができます。
データベースからのデータが必要な場合は、すべてのビューで呼び出されるコンテキストプロセッサを使用するよりも、テンプレートタグを使用する方がよいでしょう。
サイドバーの静的コンテンツ(検索フォームなど)の場合、その単純なtemplate/html。
タグのリスト、最近の投稿などの動的コンテンツの場合:テンプレートでこの情報を配置する要素(divなど)を特定したら、カスタムテンプレートタグまたはカスタムコンテキストプロセッサを使用してコンテンツにデータを入力できます。
あなたの場合、コンテンツがリクエストパラメータやURLに実際に依存していない場合は、テンプレートタグの方が適しています。