我覆盖了dispatch()为我的PayPal IPN返回200 OK,但get_context_data()永远不会被调用。知道为什么吗?
class IPN(TemplateView):
def dispatch(self, *args, **kwargs):
logger.debug("dispatching now")
return HttpResponse('<h1>Page was found</h1>')
def get_context_data(self, **kwargs):
#verify ipn and create user account
谢谢!
答案 0 :(得分:2)
原始dispatch
决定应该调用视图实现的HTTP方法 - 例如方法get
..
在大多数GenericView
中,get
方法(例如)调用get_context_data
..
如果您已重写调度以不调用正确的HTTP方法,那么它将不会被调用。
== edit ==
现在您已经发布了代码,我们可以看到您没有调用get
方法或视图实现的任何其他HTTP方法。您刚刚返回了回复,因此您从未调用过get_context_data
答案 1 :(得分:2)
你可以打电话
super(IPN, self).dispatch(*args, **kwargs)
如果您希望在dispatch
中运行某些代码,请在dispatch
中。如果不是这种情况,您应该在视图中覆盖get
方法,系统会自动调用get_context_data
。
答案 2 :(得分:1)
正如您之前所说,dispatch
而非get_context_data
都不是覆盖此处的正确方法。 dispatch
实际上只是要确定是要拨打get
还是post
:您应该覆盖其中一个或两个。 get_context_data
用于提供渲染模板的上下文数据:如果您没有渲染模板,则不应该覆盖该方法。
答案 3 :(得分:1)
我认为你并不清楚django CBV是如何工作的(例如TemplateView),如果你刚开始使用它们,不要担心它有点复杂。
阅读本文:http://www.gregaker.net/2012/apr/19/how-do-django-class-based-views-work/
在dispatch()
方法和描述如何在TemplateView中互连之前,它会非常深入。
请花10分钟阅读,这将真正有所帮助,您将自己理解,您在代码中缺少什么。 :)