【问题标题】:django how to get Response in class based viewdjango 如何在基于类的视图中获取响应
【发布时间】:2014-02-27 05:17:08
【问题描述】:

现在我有了一个基于类的视图。我想在这个视图中设置cookie,但是我可以得到响应,但是响应是在get方法中返回的。所以我不能将cookie设置为响应。所以如何在基于类的视图中获取响应

 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

【问题讨论】:

    标签: django cookies django-class-based-views


    【解决方案1】:

    您不能在request 上设置_cookie,只能在response 上设置_cookie,但 burhan-khalid 朝着正确的方向前进。 get_context_data 仅返回一个字典,因此您无法访问那里的响应。您必须通过dispatchTemplateViewrender_to_response 访问它。这是一个例子:

    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
    

    我建议您不要在get_context_data 中执行所有处理代码。您可能需要重构以获取您想要在render_to_response 中设置的cookie。

    【讨论】:

    • 这很好用。我的问题是我想在 post_context_data 的 Cooke 中设置一个标志来标记操作是成功还是失败,然后在 get_context_data 中从 cookie 中获取标志并在模板中显示消息
    • 你可以在 github github.com/djangochina/UUBlog 看到我的代码。这是我所有基于类的视图结构。github.com/djangochina/UUBlog/blob/master/build/20130918/doc/…
    • 你能给我一些建议吗?
    • 本UUBlog全部使用基于类的视图
    • 你想在哪里设置标志?你可以像这样在任何地方设置它:self.success = 'success' 然后在get_context_data 你可以像这样将它添加到模板的上下文中:context['success'] = self.success 然后在render_to_response,当你设置cookie时,只需执行response.set_cookie("success",self.success)
    猜你喜欢
    • 1970-01-01
    • 2016-09-03
    • 2013-08-20
    • 2021-07-25
    • 2012-03-29
    • 2013-04-14
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    相关资源
    最近更新 更多