57

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

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

私はあなたの応答に感謝します。前もって感謝します!

4

3 に答える 3

97

Django テンプレートを使用すると、最適化のために 1 回 (1 回だけ) コンパイルされ、将来の使用のために保存されます。{{ myvar1 }}テンプレートには、とのように二重中括弧で囲まれた変数名を含めることができます {{ myvar2 }}

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

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

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

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

于 2014-01-06T19:53:00.207 に答える
3

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

  1. ヘルパー関数Contextが自動的に

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

  3. いいえ、コンテキスト プロセッサは、リクエストを受け取り、変数のディクショナリを返す関数です。このディクショナリは、 でレンダリングされるすべてのテンプレートで使用できます。次にRequestContext例を示します。

    def get_stuff_from_session(request):
        return {'stuff': request.session['stuff']}
    
于 2014-01-06T19:39:48.673 に答える