如何在Django中设置cookie然后渲染模板?

Ray*_*Ray 17 django cookies django-views

我想在视图中设置一个cookie,然后让该视图呈现一个模板.据我了解,这是设置cookie的方法:

def index(request):
    response = HttpResponse('blah')
    response.set_cookie('id', 1)
    return response
Run Code Online (Sandbox Code Playgroud)

但是,我想设置一个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
Run Code Online (Sandbox Code Playgroud)

模板将包含链接,单击这些链接将执行其他视图,以检查我正在设置的cookie.我在上面第二个例子中展示的是什么?我知道我可以创建一个包含我的模板的所有HTML的字符串,并将该字符串作为参数传递给HttpResponse,但这看起来真的很难看.有没有更好的方法来做到这一点?谢谢.

Ray*_*Ray 18

这是怎么做的:

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
Run Code Online (Sandbox Code Playgroud)

  • 您首先实例化一个HttpResponse但不做任何事情.`render`返回一个响应,你将其分配到同一个变量中,然后在其中设置cookie并最终返回.您的答案将与删除行`response = HttpResponse()`等效. (4认同)
  • 我可能误解了一些东西,但不是"如何在渲染模板之前设置cookie*"的问题? (4认同)

vmo*_*eco 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
Run Code Online (Sandbox Code Playgroud)


小智 5

接受的答案在呈现模板之前设置 cookie。这有效。

response = HttpResponse()
response.set_cookie("cookie_name", "cookie_value")
response.write(template.render(context))
Run Code Online (Sandbox Code Playgroud)