27

ビュー内に Cookie を設定し、そのビューにテンプレートをレンダリングさせたいと考えています。私が理解しているように、これはクッキーを設定する方法です:

def index(request):
    response = HttpResponse('blah')
    response.set_cookie('id', 1)
    return response

ただし、Cookie を設定してから、次のようなテンプレートをレンダリングしたいと考えています。

def index(request, template):
    response_obj = HttpResponse('blah')
    response_obj.set_cookie('id', 1)
    return render_to_response(template, response_obj)   # <= Doesn't work

テンプレートには、クリックすると、設定している Cookie をチェックする他のビューを実行するリンクが含まれます。上記の 2 番目の例で示した正しい方法は何ですか? テンプレートのすべての HTML を含む文字列を作成し、その文字列を引数として HttpResponse に渡すことができることは理解していますが、それは本当に醜いようです。これを行うより良い方法はありませんか?ありがとう。

4

5 に答える 5

6

テンプレートをレンダリングするときに Cookie の値を設定する必要があるだけの場合は、次のようなことを試すことができます。

def view(request, template):
    # Manually set the value you'll use for rendering
    # (request.COOKIES is just a dictionnary)
    request.COOKIES['key'] = 'val'
    # Render the template with the manually set value
    response = render(request, template)
    # Actually set the cookie.
    response.set_cookie('key', 'val')

    return response
于 2016-06-22T02:37:14.113 に答える
5

受け入れられた回答は、テンプレートがレンダリングされる前に Cookie を設定します。これは機能します。

response = HttpResponse()
response.set_cookie("cookie_name", "cookie_value")
response.write(template.render(context))
于 2016-04-29T09:48:43.540 に答える
-1
def index(request, template):
    response = HttpResponse('blah')
    response.set_cookie('id', 1)
    id = request.COOKIES.get('id')
    return render_to_response(template,{'cookie_id':id})
于 2013-06-12T04:25:52.640 に答える