我想在视图中设置一个cookie,然后让该视图呈现模板。据我了解,这是设置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。我在上面第二个例子中展示的是什么?我知道我可以创建一个包含我的模板的所有HTML的字符串,并将该字符串作为参数传递给HttpResponse,但这看起来真的很难看。有没有更好的方法来做到这一点?感谢。
答案 0 :(得分:15)
这是怎么做的:
from django.shortcuts import render
def home(request, template):
response = render(request, template) # django.http.HttpResponse
response.set_cookie(key='id', value=1)
return response
答案 1 :(得分:4)
如果你只需要在渲染模板时设置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
答案 2 :(得分:2)
接受的答案在呈现模板之前设置cookie。这很有效。
{{1}}
答案 3 :(得分:0)
SEQUENCE
答案 4 :(得分:-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})