2013-07-30 4 views
-1

"bdrMenuView"라는 이름의 browserView 클래스를 만들었습니다. "class bdrMenuView (BrowserView) :"와 같아야합니다. 클래스에는 "createPictMenu"라는 메서드가 포함되어 있습니다. 전체 클래스는다른 클래스의 한 클래스의 인스턴스 만들기

이어야합니다.
class bdrMenuView(BrowserView): 
       def createPictMenu(self): 

이제 LogoViewlet이라는 클래스를 하나 더 작성했습니다. 그것은 "클래스 LogoViewlet (ViewletBase) :"과 같아야합니다. 클래스에는 "update"라는 메서드가 포함되어 있습니다. 전체 클래스가되어야합니다

class LogoViewlet(ViewletBase): 
       def update(self): 

이제 다른 클래스에서 browserView 클래스의 메서드를 호출하려고합니다.

class LogoViewlet(ViewletBase): 
       def update(self): 
        a = bdrMenuView(self,BrowserView)  ---------> instance of BrowserView class 
        logoName = a.createPictMenu() 

같은 클래스의 인스턴스를 만들었습니다. 올바른지 또는 내가 생성하지 않은 것인지 알고 싶습니다.

+0

로고보기 렛에서보기를 만들려고하는 메일 링리스트에 표시되었습니다. 그건 실수 야. 메뉴를 만들려면 기존 메뉴 포틀릿 중 하나를 사용하거나이를 기반으로 메뉴를 만들어야합니다. –

+0

기본 plone 로고를 우리 메뉴로 바꾸고 싶습니다. 기본 LogoViewlet을 사용했습니다. 내 자신의 클래스 메서드를 호출했다. 그래서 우리의 메뉴를 반환 할 것입니다 .... 그래서 나는 단지 기본 LogoViewlet 클래스에서 우리 자신의 클래스 메소드를 호출해야합니다 ... –

+0

아, 당신은 href 링크 포인트를 변경하고 싶습니까? 당신이 "우리 메뉴에 로고를 바꾸고 싶다"고 말할 때 당신이 말하고자하는 것은 무엇입니까? –

답변

0

아니요, 정확하지 않으며 절대적으로 의미가 없습니다. 왜 당신은 매개 변수로 baseclass를 전달합니까? 기본적인 파이썬을 배우십시오.

보기 매개 변수는 컨텍스트와 요청입니다. 다른 뷰 (뷰렛 인) 내부에서 뷰를 만드는 가장 좋은 방법은 뷰렛을 가로 지르는 것입니다. restrictedTraverse를 사용하여이 작업을 수행 할 수 있습니다.

정확한 코드는보기가 등록 된 항목에 따라 다릅니다. 예를 들어 조회 할보기가 @@bdrmenu이고 임의의 내용으로 등록 된 경우 self.context.restrictedTraverse('@@bdrmenu')으로 조회 할 수 있습니다.

관련 문제