2016-01-24 3 views
0

Это мое первое приложение django, и мне было интересно, можно ли иметь общий класс, который будет расширен всеми представлениями. НапримерDjango: Добавить другой подкласс в классном представлении

class GeneralParent: 
    def __init__(self): 
     #SETTING Up different variables 
     self.LoggedIn = false 
    def isLoggedIn(self): 
     return self.LoggedIn 

class FirstView(TemplateView): 
    ####other stuff## 
    def get_context_data(self, **kwargs): 
     context = super(IndexView, self).get_context_data(**kwargs) 
     allLeads = len(self.getAllLeads()) 
     context['isLoggedIn'] = ####CALL GENEREAL PARENT CLASS METHOD### 

     return context 

class SecondView(FormView): 
####other stuff## 
    def get_context_data(self, **kwargs): 
     context = super(IndexView, self).get_context_data(**kwargs) 
     allLeads = len(self.getAllLeads()) 
     context['isLoggedIn'] = ####CALL GENEREAL PARENT CLASS METHOD### 

     return context 

Возможно ли это в джанго?

ответ

2

Порядок наследования важен и вызовы суперкаскадного перехода по линии наследования. Вы должны учитывать любые переменные, которые могут быть переданы в наследование в ваших методах __init__.

Первые методы наследования будут вызываться первым, а второй как метод __init__ первого родительского вызова super (для вызова __init__ второго родителя). GeneralParent должен наследовать от object или класс, который наследуется от object.

class GeneralParent(object): 
    def __init__(self,*args,**kwargs): 
     #SETTING Up different variables 
     super(GeneralParent,self).__init__(*args,**kwargs) 
     self.LoggedIn = false 
    def isLoggedIn(self): 
     return self.LoggedIn 

class FirstView(GeneralParent,TemplateView): 
    ####other stuff## 
    def get_context_data(self, **kwargs): 
     context = super(FirstView, self).get_context_data(**kwargs) 
     allLeads = len(self.getAllLeads()) 
     context['isLoggedIn'] = ####CALL GENEREAL PARENT CLASS METHOD### 

     return context 

class SecondView(GeneralParent,FormView): 
####other stuff## 
    def get_context_data(self, **kwargs): 
     context = super(SecondView, self).get_context_data(**kwargs) 
     allLeads = len(self.getAllLeads()) 
     context['isLoggedIn'] = ####CALL GENEREAL PARENT CLASS METHOD### 

     return context 
+0

Это сработало, но почему мой класс должен наследовать от объекта? –

+1

'super' работает только с классами нового стиля (наследуется от' object') - больше информации - https://docs.python.org/2/glossary.html#term-new-style-class –