2016-04-07 20 views
0

Yazılı dekoratörüm burada kod var.Django görünümünde göndermek için Özel dekoratör uygulayın?

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) 

Ancak bu dekoratöre gönderim yöntemini eklemek istiyorsanız bunu nasıl yapabilirim?

+0

Soruyor musun aşağıdakilerden birini yapabilir? – v1k45

+0

Evet, denedim ama nesneye erişemiyorum. –

cevap

1

Bu, in the docs kapsamındadır.

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

Veya kullanmak method_decorator() birden çok kez: Eğer gönderim yöntemi üzerinde birden dekoratörler kullanabilirsiniz eğer

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

Teşekkürler, dekoratörüm içindeki kendi kendine nesneye nasıl erişebilirim, gösterilen nesnenin "object" özelliği yoktur. –

+0

Nesne yok (bu bir görünüm dekoratördür). Muhtemelen 'self.object' örneklerini' request' ile değiştirmelisiniz. – rnevius

İlgili konular