2010-04-21 5 views
0

개체 클래스에 따라 다른 템플릿을 사용하는 방법은 무엇입니까? 다음마코 템플릿은 객체 클래스에 따라 다릅니 까?

t = type2templ.get(type(theobj), default_templ) 
... t.render() ... 

theobj을한다고 가정 - 문

+2

Python으로 작업 할 때, 객체의 유형에 따라 다른 일을하는 것은 거의 항상 설계 결함입니다. 아마도 당신이 템플릿을 쉽게 접근 할 수 있도록 데이터를 사전 처리해야할까요? –

+0

나는 그것을 할 것이다, 나는 내가 무엇을 잘못하고 있는지를 깨닫는다. – Timmy

답변

2

당신은 dict을 할 수있는 경우, 키 등의 유형 (즉, 클래스)로, type2templ를 호출하고 값으로 mako.template.Template 인스턴스 분차 이외의 새로운 스타일 클래스의 인스턴스입니다 (더 이상 사용되지 않는 최선의 "레거시"클래스는 아닙니다. 파이썬 2에서 여전히 기본 클래스입니다.)이를 사용하면 확실히 코드를 새 스타일로 업그레이드해야합니다. 클래스를 사용하지만, theobj.__class__을 사용하면 해킹 가능하면 대체 가능합니다. 여기서 type(theobj)). default_templ은 "위에 해당하지 않는 것"에 사용할 기본 템플릿 인스턴스입니다 (theobj이 인식되지 않는 유형 인 경우 예외가있는 경우 .get 호출 대신 사각 브래킷 인덱싱 사용).

주 (직접) "지원 상속"하지이 않는 - 경우 (예를 들어) 클래스 템플릿 bar-type2templfoo지도, 당신은 서브 클래스 foobaz을하지만, 명시 적으로 type2templ에 기록하지 않는 것 템플릿 인스턴스를 사용해야하는 경우 baz의 인스턴스에 대한 기본 템플릿을 가져옵니다. 상속을 지원하는 것은 더 복잡합니다. mako 템플릿 인스턴스를 클래스 속성 중 하나로 만드는 경우가 아니라면 (물론 해당 속성의 이름을 thetempl! -으로 지정하면 theobj.thetempl!) 간단한 것이지만, 뷰를 분리하는 것은 이해할 수 있습니다. 모델.

관련 문제