2016-04-07 59 views
0

我在這裏寫的裝飾是代碼。應用自定義裝飾器在Django視圖中分派?

def is_envlocked(func): 
    def is_lockedwrapper(self): 
     username = "tejesh.s" 
     env_id = self.object.env_id 
     env = Capacity.models.Env.objects.get(id=env_id) 
     if env.user == username: 
      return True 
     else: 
      return reverse('envapps', kwargs={'envid':self.object.env.id}) 
    return is_lockedwrapper 

class EnvappsCreate(CreateView): 
    model = Capacity.models.Envapps 
    fields=['appname','VM_Image','functional_count','flavor'] 
    template_name = 'envapps_create_form.html' 
    @method_decorator(login_required) 
    def dispatch(self, request,envid): 
    return super(EnvappsCreate, self).dispatch(request) 

但是想要添加此裝修器來配置調度方法怎麼能這樣?

+0

你是問,如果你能在調度方法使用多個裝飾? – v1k45

+0

是的,我試過但我無法訪問該對象。 –

回答

1

這涵蓋了in the docs。您可以執行下列操作之一:

decorators = [login_required, is_envlocked] 
@method_decorator(decorators) 
def dispatch(self, request, envid): 

或者使用method_decorator()多次:

@method_decorator(login_required) 
@method_decorator(is_envlocked) 
def dispatch(self, request, envid): 
+0

謝謝,我如何訪問我的裝飾器中的自我對象,它顯示的對象沒有屬性'對象'。 –

+0

沒有對象(這是一個視圖裝飾器)。你可能應該用'request'來替換'self.object'的實例。 – rnevius

相關問題