[解決済み] Django - 変数をすべてのテンプレートで使用できるようにするには?
2023-05-11 17:06:47
質問
views.pyファイルのすべてのメソッドで同じコードを繰り返さずに、すべてのテンプレートに変数を渡す方法を知りたいです。
以下の例では、カテゴリ(カテゴリオブジェクトの配列)をWebアプリのすべてのテンプレートで利用できるようにしたいと思います。
Eg: I would like to avoid writing 'categories':categories on every method. Is it possible?
1つのビューメソッド
def front_page(request):
categories = Category.objects.all()
if is_logged_in(request) is False:
return render_to_response('users/signup.html', {'is_logged_in': is_logged_in(request), 'categories':categories}, context_instance=RequestContext(request))
else:
return render_to_response('users/front_page.html', {'is_logged_in': is_logged_in(request), 'categories':categories},context_instance=RequestContext(request))
別のビューメソッド
def another_view_method(request):
categories = Category.objects.all()
return render_to_response('eg/front_page.html', {'is_logged_in': is_logged_in(request), 'categories':categories},context_instance=RequestContext(request))
どのように解決するのですか?
コンテキストプロセッサは簡単に作ることができます。という名前のアプリがあると仮定します。
custom_app
という名前のアプリがあると仮定して、次のステップに従います。
-
追加
custom_app
にINSTALLED_APPS
でsettings.py
(に変更します(もうやってますよね)。 -
を作成します。
context_processors.py
をcustom_app
フォルダーに格納します。 -
その新しいファイルに以下のコードを追加してください。
def categories_processor(request): categories = Category.objects.all() return {'categories': categories}
-
追加
context_processors.py
にTEMPLATE_CONTEXT_PROCESSORS
でsettings.py
TEMPLATE_CONTEXT_PROCESSORS += ("custom_app.context_processors.categories_processor", )
そして、今度は
{{categories}}
を使うことができるようになりました :D
Django 1.8 の時点では
を追加するには
TEMPLATE_CONTEXT_PROCESSORS
を追加するには、設定に次のコードを追加する必要があります。
TEMPLATES[0]['OPTIONS']['context_processors'].append("custom_app.context_processors.categories_processor")
あるいは、その文字列を直接
OPTIONS.context_processors
のキーに直接記述することもできます。
TEMPLATES
を設定します。
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Djangoのバージョンを確認する方法
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] url ?%} を使用する %} を使用する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複