从dispatch方法访问context_data

1 投票
1 回答
770 浏览
提问于 2025-04-18 12:24

我在使用基于类的视图(DetailView)时,想从 dispatch 方法获取 context_data,但遇到了一些问题。系统报错,提示信息是:'ClientView' 对象没有属性 'object'。我是不是漏掉了什么?

class ClientView(LoginRequiredMixin, DetailView):
    model=Client
    template_name='core/client.html'

    def get_context_data(self, **kwargs):
        context = super(ClientView, self).get_context_data(**kwargs)

        # doing something with the context

        return context

    def dispatch(self, request, *args, **kwargs):
        context = self.get_context_data()

        # doing something with the context

        return super(ClientView, self).dispatch(request, *args, **kwargs)

-- 编辑 --

处理 AJAX 或普通请求的地方不是 dispatchget,而是 render_to_response。这个方法已经把上下文作为参数传递过来了。

1 个回答

2

通过重写 dispatch 方法并直接调用 get_context_data,你绕过了正常的视图处理流程。实际上,self.object 这个对象直到调用 get 方法时才会被定义。

我怀疑你其实并不需要重写 dispatch 方法。能不能解释一下你为什么需要这么做?

撰写回答