Ответ 1
Вот как это сделать:
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
Я хочу установить cookie внутри представления, а затем отобразить этот вид шаблона. Насколько я понимаю, это способ установить cookie:
def index(request):
response = HttpResponse('blah')
response.set_cookie('id', 1)
return response
Тем не менее, я хочу установить куки файл, а затем создать шаблон, что-то вроде этого:
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, но это кажется действительно уродливым. Разве нет лучшего способа сделать это? Спасибо.
Вот как это сделать:
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
Если вам нужно установить значение 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
Принятый ответ устанавливает cookie перед тем, как будет обработан шаблон. Это работает.
response = HttpResponse()
response.set_cookie("cookie_name", "cookie_value")
response.write(template.render(context))
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})