2017-09-19 1 views
0

내 Django 앱에는 실제 뷰의 대부분을 상속받은 일련의 일반 뷰 (생성, 업데이트, 삭제, 세부 사항, 목록)가 있습니다. 이러한 모든 뷰는 컨텍스트 (모델의 단수 및 복수 이름, 작성, 나열 등)에 유용한 정보를 추가합니다. 그러나보기가 더 많거나 적게 모두 동일한 코드를 복제합니다. 이런 이유로 나는 이러한 것들을 컨텍스트 프로세서로 옮기고 코드 중복을 제거하고 싶습니다.컨텍스트 프로세서 내에서 모델/클래스 정보 액세스

내 문제는 컨텍스트 프로세서에 전달 된 요청 (예 : 모델 인스턴스, 모델 클래스, 폼 클래스 등을 액세스 할 수있는 경우)에서 필요한 항목을 결정할 수 없다는 것입니다. 이드는 괜찮을 것이다. 아래 코드는 뷰 내에서 get_context_data가 어떻게 보이는지 보여줍니다. 컨텍스트 프로세서에서 어떻게 복제합니까?

감사합니다.

def get_context_data(self, **kwargs): 
    """Passes context variables to the HTML templates.""" 
    context = super(CodexAnonDetailView, self).get_context_data(**kwargs) 
    context['model_name'] = model_ngettext(self.model, 1) 
    context['model_name_plural'] = model_ngettext(self.model, 2) 
    context['object_create_url'] = reverse('%s:%s_create' % (resolve(self.request.path).app_name, self.model.__name__)) 
    context['model_list_url'] = reverse('%s:%s_list' % (resolve(self.request.path).app_name, self.model.__name__)) 

답변

0

장고의 클래스 기반 뷰의 아름다움은 당신이 모두 일반 뷰 클래스에서 상속 후 필요로하고 동작을 구현하는 클래스를 정의 공유 기능을

를 구현하는 클래스 상속을 활용할 수 있다는 것입니다 및 내 믹스

class MyMixin(object): 

    def get_context_data(self, **kwargs): 
     context = super(MyMixin, self).get_context_data(**kwargs) 
     context['model_name'] = model_ngettext(self.model, 1) 
     context['model_name_plural'] = model_ngettext(self.model, 2) 
     context['object_create_url'] = reverse('%s:%s_create' % (resolve(self.request.path).app_name, self.model.__name__)) 
     context['model_list_url'] = reverse('%s:%s_list' % (resolve(self.request.path).app_name, self.model.__name__)) 
     return context 


class MyCreateView(MyMixin, CreateView): 

    model = MyModel 
관련 문제