2016-03-02 46 views
0

在下面的示例代碼中聲明調度方法中的變量是否有效? 如果不是有更好的CBV編碼標準嗎?我的想法是避免重新聲明同一變量在每一個HTTP方法Django CBV調度方法的有效語法

class MyClsName(View): 
    template_name = "setup/code_install.html" 

    def dispatch(self, request, *args, **kwargs): 
     self.name = request.session['name'] 
     self.obj = MyModel.objects.get(Name=self.name) 
     return super(MyClsName, self).dispatch(request, *args, **kwargs) 

    def get(self, request): 
     # obj = MyModel.objects.get(Name=self.name) --> to avoid 
     context = {'account': self.obj} 
     return render(request, self.template_name, context) 

    def post(self, request): 
     # obj = MyModel.objects.get(Name=self.name) --> to avoid 
     context = {'account': self.obj} 
     return render(request, self.template_name, context) 
+0

yup,在'dispatch'裏做的事情完全沒問題 – yedpodtrzitko

回答

2

這不是無效的,但它肯定是不服用的基於類的視圖的功能。很少有必要覆蓋調度或獲取/發佈。相反,您應該選擇更適合的子視圖,並覆蓋它提供的特定方法。在這種情況下,由於您想要顯示單個對象,因此適當的基類是DetailView,並且要覆蓋的方法是get_object

class MyClsName(DetailView): 
    template_name = "setup/code_install.html" 

    def get_object(self, queryset=None): 
     return MyModel.objects.get(Name=self.request.session['name']) 

注意不需要定義分派,獲取或發佈。

+0

謝謝指出,在我的情況下,我需要get和post方法 – shivg