개체 클래스에 따라 다른 템플릿을 사용하는 방법은 무엇입니까? 다음마코 템플릿은 객체 클래스에 따라 다릅니 까?
t = type2templ.get(type(theobj), default_templ)
... t.render() ...
이 theobj
을한다고 가정 - 문
개체 클래스에 따라 다른 템플릿을 사용하는 방법은 무엇입니까? 다음마코 템플릿은 객체 클래스에 따라 다릅니 까?
t = type2templ.get(type(theobj), default_templ)
... t.render() ...
이 theobj
을한다고 가정 - 문
당신은 dict
을 할 수있는 경우, 키 등의 유형 (즉, 클래스)로, type2templ
를 호출하고 값으로 mako.template.Template
인스턴스 분차 이외의 새로운 스타일 클래스의 인스턴스입니다 (더 이상 사용되지 않는 최선의 "레거시"클래스는 아닙니다. 파이썬 2에서 여전히 기본 클래스입니다.)이를 사용하면 확실히 코드를 새 스타일로 업그레이드해야합니다. 클래스를 사용하지만, theobj.__class__
을 사용하면 해킹 가능하면 대체 가능합니다. 여기서 type(theobj)
). default_templ
은 "위에 해당하지 않는 것"에 사용할 기본 템플릿 인스턴스입니다 (theobj
이 인식되지 않는 유형 인 경우 예외가있는 경우 .get
호출 대신 사각 브래킷 인덱싱 사용).
주 (직접) "지원 상속"하지이 않는 - 경우 (예를 들어) 클래스 템플릿 bar
-type2templ
에 foo
지도, 당신은 서브 클래스 foo
의 baz
을하지만, 명시 적으로 type2templ
에 기록하지 않는 것 템플릿 인스턴스를 사용해야하는 경우 baz
의 인스턴스에 대한 기본 템플릿을 가져옵니다. 상속을 지원하는 것은 더 복잡합니다. mako 템플릿 인스턴스를 클래스 속성 중 하나로 만드는 경우가 아니라면 (물론 해당 속성의 이름을 thetempl
! -으로 지정하면 theobj.thetempl
!) 간단한 것이지만, 뷰를 분리하는 것은 이해할 수 있습니다. 모델.
Python으로 작업 할 때, 객체의 유형에 따라 다른 일을하는 것은 거의 항상 설계 결함입니다. 아마도 당신이 템플릿을 쉽게 접근 할 수 있도록 데이터를 사전 처리해야할까요? –
나는 그것을 할 것이다, 나는 내가 무엇을 잘못하고 있는지를 깨닫는다. – Timmy