2012-02-12 6 views
2

実際のレンダリングの前にrender_to_responseに渡された辞書の値を変更するためにコンテキストプロセッサまたはミドルウェアを使用したいと考えています。私は実装しようとしているメッセージングスキーマを持っています。これは、テンプレートのレンダリングに先立ってコンテキストを検索したいユーザーのタイプに基づいてメッセージリストを生成します。Django - テンプレートの前にコンテクスト辞書にアクセスする

例:

def myview(...): 
    ... 
    return render_to_response('template.html', 
     {'variable': variable}, 
    ) 

と私は「変数」の存在に関連する情報を追加できるようにしたいと思います。

私のビューで定義した後、テンプレートに到達する前に '変数'にアクセスしてコンテキストをさらに変更できますか?

+1

あなたの質問は何ですか? – dm03514

+0

私のビューがそれを定義した後、テンプレートに到達する前に '変数'にアクセスしてコンテキストをさらに変更できるようにするにはどうすればいいですか? – garromark

答えて

4

使用TemplateResponse

from django.template.response import TemplateResponse 

def myview(...): 
    ... 
    return TemplateResponse(request, 'template.html', 
     {'variable': variable}, 
    ) 

def my_view_wrapper(...): 
    response = my_view(...) 
    variable = response.context_data['variable'] 
    if variable == 'foo': 
     response.context_data['variable_is_foo'] = True 
    return response 
+0

これは私の質問への応答でした:)私のミドルウェアでprocess_template_response()として実装したコメントの関数my_view_wrapperは、必要なデータを持つresponse.context_dataへのアクセス権を得ています。ありがとう! – garromark

0

あなたはコンテキストのdictonaryを作成することができます。

def myview(...): 
    c = dict() 
    c["variable"] = value 
    ... 
    do some stuff 
    ... 
    return render_to_response('template.html',c) 

はたぶんRequestContextは、あなたが探しているものです。

+0

ミドルウェアのprocess_responseで私はRequestContext(レスポンス)を使用しましたが、レスポンスにc ["variable"]のようなビュー定義の変数がすべてありませんでした。また、これらの変数を複数の場所に読み込んでいるので、可能な場合はビューの外で自動化したいと思っています。私が100%クリアされていない場合は申し訳ありません:) – garromark

2

これは簡単です。あなたの例にちょうどビットより多くのコードを提供していれば、答えはちょっとあなたを持っているかもしれません。

# first build your context, including all of the context_processors in your settings.py 
context = RequestContext(request, <some dict values>) 
# do something with your Context here 
return render_to_response('template.html', context) 

コメントへの更新:

render_to_response()の結果は、コンテキストに対するレンダリングされたテンプレートを含むHttpResponseオブジェクトです。そのオブジェクトは(私の知る限り)関連するコンテキストを持っていません。あなたは変数にrender_to_response()の結果を保存し、それを渡したコンテキストにアクセスすることができますが、解決しようとしている問題がわかりません。

レンダリング中にコンテキストを変更しましたか?そうであれば、コンテクストには、テンプレート処理中にプッシュ/ポップされるスコープスタックがあるため、情報がそれ以上存在しないことがあります。

+0

settings.pyがページの読み込み時にどのユーザータイプにアクセスしているかわかりません。私はどのタイプのユーザーがアクセスされているかに基づいて異なる情報をロードしたいと思いますが、これは普遍的なアクションですので、各ビューで実行する必要はありません。 render_to_response()が呼ばれた後、コンテキスト/ビュー生成辞書にアクセスする方法はありますか? – garromark