我制作了一个自定义方法,可以在get()
页面中调用DetailView
方法时保存会话。
这是我的代码示例。
class CustomDetailView(DetailView):
model = Jobs
template_name = "jobs/job_detail.html"
context_object_name = "job"
def custom_save_session(self, request):
# save session and so on
...
我想知道我应该在哪里调用custom_save_session
方法。
我试图在get()
,get_context_data()
内部调用它,依此类推。
一切都很好,但我有好奇心什么是最好的方法。
get()
方法内打电话吗?原因我希望每次get()
调用时保存会话数据。get()
中每次调用DetailView
时调用自定义方法?(我也不仅想知道DetailView
,还想知道django中的所有CBV
答案 0 :(得分:1)
每个基于类的视图都有一个运行顺序,每个顺序都有自己的方法。
CBV为每个执行步骤都有专门的方法。
您可以从运行要从中调用自定义方法的步骤的方法调用自定义方法。
因此,您必须决定自定义方法的运行位置,并在此步骤的视图通用方法之上定义您自己的方法。
在url中,CBV返回as_view(),这是一个获得reuqest的可调用函数。从这个入口点(实际上是CBV调度方法),CBV运行所有步骤。
答案 1 :(得分:1)
我们可以通过两种方式在类DetailView
中调用额外的方法。
disatch
方法get
方法class CustomDetailView(DetailView):
model = Jobs
template_name = "jobs/job_detail.html"
context_object_name = "job"
def custom_save_session(self, request):
pass
def dispatch(self, request, *args, **kwargs):
self.custom_save_session(request)
return super(CustomDetailView, self).dispatch(request, *args, **kwargs)
class CustomDetailView(DetailView):
model = Jobs
template_name = "jobs/job_detail.html"
context_object_name = "job"
def custom_save_session(self, request):
pass
def get(self, request, *args, **kwargs):
self.custom_save_session(request)
return super(CustomDetailView, self).get(request, *args, **kwargs)
以上两种方式都没问题。但是,我会使用dispatch
方法,因为我们正在处理会话数据,所以会更好。