6

コンテキスト プロセッサがあるとします。

def title(request):
   return {'titles': 'mytitle'}

テンプレートでこの変数に としてアクセスできます{{ titles }}

しかし、どうすればビューでこれを行うことができますか?

def myview(request):
    print request.titles

動作しないようです -'WSGIRequest' object has no attribute 'titles'


それとも、ビューとテンプレートの両方でグローバル変数にアクセスできるようにするための (コンテキスト プロセッサよりも) 優れたアプローチがあるのでしょうか?

前もって感謝します。

4

3 に答える 3

10

コンテキスト プロセッサのメソッド パス (folder.context_processor.application_context) を TEMPLATE_CONTEXT_PROCESSORS に追加します。

私の場合、application_context はファイル context_processor.py 内で定義したメソッドであり、メソッド「application_context」は {'titles': 'mytitle'} を返します

ビューで「タイトル」をグローバル変数として使用する場合は、このように使用します

global_var = RequestContext(request).get("app_config")
titles = global_var.get("titles")
print titles 

唯一の利点は、「同じ変数 'titles' がテンプレートとビューにも表示される」ことです

于 2012-07-09T14:06:01.283 に答える
4

コンテキストプロセッサは、決してグローバル変数ではありません。これらは、RequestContextが開始されたときに実行される関数であり、そのコンテキストにアイテムを追加します。したがって、RequestContextがある場合、つまりテンプレート内でのみ使用できます。

あなたの例は、あなたがアクセスしようとしている変数についての良い考えを実際には与えていません。どこでも使用したい定数の場合は、settings.pyなどの中央のどこかにそれらを定義し、必要な場所にそのモジュールをインポートします。さらに、コンテキストプロセッサを使用してそれらをコンテキストに追加します。

于 2011-10-15T16:49:37.050 に答える
1

ビューにデータが必要な場合は、コンテキスト プロセッサと組み合わせてミドルウェアを使用する方がクリーンです。

  1. 要求オブジェクトにデータを保存する簡単なカスタム ミドルウェアを作成しますrequest.x( example など)。これで、ビューでこれに直接アクセスできます。
  2. テンプレートから request.x にアクセスできるようにしますdjango.core.context_processors.requestTEMPLATE_CONTEXT_PROCESSORS

私の関連する質問を参照してください: Django: How to provide context to all views (not templates)?

于 2016-05-07T11:29:43.270 に答える