在基于类的视图中获取url参数



我需要在基于类的视图中检索url中写入的pk值:

path('<int:pk>/data/', views.DataView.as_view(), name='data'),

然而,我看到的到处都是在getpost等方法的定义中检索的pk。

我想要的是能够使用它来定义我的类变量,因为我需要在我的类中的每个方法中从这个pk中获得相同的值,如下所示:

class DataView(ContextMixin, UpdateView):
pk = get_pk_from_url
...
value = ...
def get(self, request, *args, **kwargs):
value = self.value
# Do something with value
def post(self, request, *args, **kwargs):
value = self.value
# Do something with value

我在写这个问题的时候有了一个想法,那就是定义一个方法来做我需要做的事情,然后在我的其他方法中调用这个方法。

class DataView(ContextMixin, UpdateView):
def get_value(self):
self.pk = self.kwargs['script_id']
...
self.value = ...
def get(self, request, *args, **kwargs):  
self.get_value()
value = self.value
# Do something with value
def post(self, request, *args, **kwargs):
self.get_value()
value = self.value
# Do something with value

但是,我不知道是否还有其他方法,所以我还是想问我的问题。

感谢@WillemVanOnsem的评论,我能够使用setup方法(这里的文档)来定义我需要定义的一切。所以最后我得到了这样的内容:

class DataView(View):
def setup(self, request, *args, **kwargs):
self.pk = kwargs['pk']
...
self.value = ...
return super().setup(request, *args, **kwargs)

def get(self, request, *args, **kwargs):
value = self.value

def post(self, request, *args, **kwargs):
value = self.value

getpost之前调用setup方法,在其中声明的类属性可以在其他方法中使用。

最新更新