2017-06-20 7 views
2

私たちのアプリケーション(Django 1.8を実行中)では、辞書をrender()関数のcontextパラメータに渡してビューの一部として返すことによってテンプレートをレンダリングする傾向があります。たとえば:Djangoテンプレートコンテキストオブジェクトの目的は?

from django.views.generic import View 

class HomePageView(View): 

    def get(self, request, *args, **kwargs): 
     context = {'foo': 'bar', 'foo2': 'bar2'} 
     return render(request, "page.html", context) 

は今、私はそれを探し始めたので、私は、Djangoの「コンテキスト」オブジェクトではなく、辞書を使っている人の例を見ています。

from django.views.generic import View 
from django.template import Context 

class HomePageView(View): 

    def get(self, request, *args, **kwargs): 
     context = Context() 
     context['foo'] = 'bar' 
     context['foo2'] = 'bar2' 
     return render(request, "page.html", context) 

ドキュメントはこのContextオブジェクトが辞書(ポップ、コピー、キーの割り当てなど)に類似した方法でと相互作用することができることを示しているとあなたが辞書にそれを比較することができますフラット化()メソッドを持っています。 https://docs.djangoproject.com/en/1.8/ref/templates/api/#playing-with-context

私の質問です:辞書ではなくコンテキストオブジェクトを使用する理由はありますか?要求変数に簡単にアクセスしたい場合、誰かがどのようにRequestContextのサブクラスを見つけるのかを知ることができますが、私はコンテキストオブジェクトのユーティリティがないと思います。

答えて

4

Python辞書は、既知のキーと変数値の間のマッピングです。 Context()は辞書と似ていますが、Context()は追加機能を提供します。

テンプレートをレンダリングするときは、コンテキストが必要です。これはdjango.template.Contextのインスタンスにすることができますが、Djangoには若干異なる動作をするサブクラスdjango.template.RequestContextもあります。

render()ショートカットは、別のコンテキストインスタンスが明示的に渡されない限り、RequestContextを作成します。

[...]

RequestContextcontext processorsは、冗長性の問題を解決するために作成されました。 Context processorsでは、各コンテキストに自動的に設定される変数の数を指定し、各render()呼び出しで変数を指定する必要はありません。

[...]

  • (設定で)TEMPLATE_CONTEXT_PROCESSORSで任意のコンテキストプロセッサは、そのsetteingsファイルによってproweredすべてのテンプレートで利用できるようになりますことを心に留めておいてください。

  • カスタムコンテキストペイロードは、コードベースのどこにでも置くことができます。 Djangoが気にするのは、TEMPLATESの設定でcontext_processorsオプションを指定しているカスタムコンテキストプロセッサ、または直接使用している場合はcontext_processors引数がEngineであることです。これは、アプリケーションやプロジェクト内でcontext_processors.pyというファイルに保存することです。

出典:マスタリングジャンゴ:コア。ジャンゴ1.8LTSへの完全なガイド

さらに詳しい情報:official documentation: RequestContext

+1

ああ、私はテンプレートはコンテキストオブジェクトを必要とする方法に関するドキュメントにラインを逃していたが、レンダリング機能に辞書を渡すと*と* RequestContextのオブジェクトをインスタンス化ショートカット。知ってよかった、ありがとう! –

関連する問題