2

実際のレンダリングの前に、コンテキスト プロセッサまたはミドルウェアを使用して、render_to_response に渡される辞書の値を変更したいと考えています。テンプレートをレンダリングする前に、コンテキストを検索したいタイプのユーザーの存在に基づいてメッセージ リストを作成する、実装しようとしているメッセージング スキーマがあります。

例:

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

「変数」の存在に関するコンテキストに追加情報を追加できるようにしたいと思います。

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

4

3 に答える 3

5

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
于 2012-02-12T01:28:48.583 に答える
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)

コメントに更新:

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

レンダリング中にコンテキストを変更しましたか?もしそうなら、コンテキストにはテンプレート処理中にプッシュ/ポップされるスコープスタックがあるため、情報がもう存在しないことに気付くかもしれません。

于 2012-02-12T00:37:55.400 に答える
0

コンテキストの辞書を作成できます。

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

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

于 2012-02-12T00:34:10.677 に答える