web-dev-qa-db-ja.com

Djangoのコンテキストとは何ですか?

私はDjango初心者なので、コンテキストとコンテキストプロセッサの概念を理解しようとしています。

  • コンテキストとは何ですか、なぜそれを使用するのですか?
  • コンテキストは、テンプレートで使用するために必要な値ですか?
  • コンテキストとコンテキストプロセッサは同じですか?

私はあなたの応答をたくさん感謝します。前もって感謝します!

42
Camilo Sanchez

Djangoテンプレートを使用する場合、テンプレートは一度だけ(一度だけ)コンパイルされ、将来の使用のために最適化として保存されます。テンプレートは_{{ myvar1 }}_および_{{ myvar2 }}_。

コンテキスト は、変数名がkeyであり、値がである辞書です値。したがって、上記のテンプレートのコンテキストが_{myvar1: 101, myvar2: 102}_の場合、このコンテキストをテンプレートのrenderメソッドに渡すと、_{{ myvar1 }}_は_101_および_{{ myvar2 }}_に置き換えられますテンプレートの_102_。これは単純な例ですが、実際のContextオブジェクトは、テンプレートがレンダリングされるcontextです。

ContextProcessorに関しては、それは少し高度な概念です。 _settings.py_ファイルには、HttpRequestオブジェクトを取り込んで辞書を返すいくつかのコンテキストプロセッサをリストできます(上記のContextオブジェクトと同様)。 Context Processorによって返された辞書(コンテキスト)は、Djangoによってユーザー(ユーザー)から渡されたコンテキストにマージされます。

コンテキストプロセッサの使用例は、テンプレート内に特定の変数を常に挿入する場合です(たとえば、ユーザーの場所が候補になる可能性があります)。各ビューに挿入するコードを記述する代わりに、そのコンテキストプロセッサを記述して、それを_TEMPLATE_CONTEXT_PROCESSORS_の_settings.py_設定に追加することができます。

これが理にかなっていることを願っています。クラスを取ってくれてありがとう!

67
Sid

contextは、変数名->テンプレートに渡される変数値マッピング。

コンテキストプロセッサでは、それぞれに設定される変数の数を指定できますcontext自動的に-各render()呼び出しで変数を指定する必要はありません。

Context公式ドキュメント で非常によく説明されています。要するに:

  1. ヘルパー関数 があなたのためにContextを構築するため、日々の使用で、ほとんど間接的に

  2. 1.を参照してください: 低レベルAPI を使用する場合にのみ必要です

  3. いいえ、 コンテキストプロセッサ は、リクエストを受け取り、 RequestContext でレンダリングされるすべてのテンプレートで使用可能な変数のディクショナリを返す関数です、 例えば:

    def get_stuff_from_session(request):
        return {'stuff': request.session['stuff']}
    
2
sk1p