djangochina
djangochina

Reputation: 91

django how to get Response in class based view

now i have a class-based view. and i want to set cookie in this view,but i can get the response,but the response is returned in the get methond .so i can not set the cookie to response.so how to get Response in class based view

 class MyView(TemplateView):
    def get_context_data(self, **kwargs):
        context = super(UBaseTemplateView, self).get_context_data(**kwargs)

        #in here set cookie,but can get the response 
        #response.set_cookie("success","success")

        return context

Upvotes: 6

Views: 4154

Answers (1)

jproffitt
jproffitt

Reputation: 6355

You cannot set_cookie on a request, only on response, but burhan-khalid was going in the correct direction. get_context_data only returns a dictionary, so you cannot access the response there. You have to access it either in dispatch, or with a TemplateView, in render_to_response. Here is an example:

class MyView(TemplateView):
    def render_to_response(self, context, **response_kwargs):
        response = super(MyView, self).render_to_response(context, **response_kwargs)
        response.set_cookie("success","success")
        return response

I would suggest you shouldn't do all your processing code in get_context_data. You may need to refactor to get the cookie you want set in render_to_response.

Upvotes: 13

Related Questions