내 피라미드 프로젝트에서이 같은 코드를 가지고 :장식 피라미드 뷰는
class SomeViews(object):
@view_config(...)
def view_a(request):
return {...}
@view_config(...)
def view_b(request):
return {...}
내가 반환 된 사전을 수정하려면보기 방법을 장식하고 싶습니다. 뷰에 데코레이터를 적용 할 수 있습니다 (처음의 경우는 view_config
). 그렇지 않으면 피라미드는 Venusian의 본질 때문에 원래 함수를 사용하고 있습니다.
클래스의 모든 메소드에 동일한 데코레이터를 적용 할 것이므로 클래스 데코레이터를 사용하는 것이 좋습니다. 그래서 그 대신 각 방법에 대한
@view_config(...)
@my_decorator("some_meta_info")
def view_b(request):
return {...}
을하고, 나는
@my_decorator("some_meta_info")
class SomeViews(object):
...
그러나 클래스 장식이 view_config
호출 후에 실행되기 때문에, 다시는 금성 작동하지 않습니다 할 싶습니다. 내 문제를 해결하는 방법을 알기 위해 view_defaults
구현을 살펴 보았지만 어떻게 작동하는지 알지 못했습니다.
어떻게 할 수 있습니까? 내가하고 싶은 것은 뷰 메소드 집합의 결과 사전을 수정하는 것입니다. 또한 BeforeRender
이벤트를 사용하려고 생각했지만 이벤트 처리기에서 액세스 할 수있는 방식으로 필요한 메타 데이터를 주입 할 방법이 없습니다. 어쨌든 데코레이터를 사용하는 것은 내 의견으로는 더 자연스럽고 파이썬적인 방법이 될 것입니다. 기본 옵션은 클래스에있는 모든 view_config
에 전달로 view_defaults
의
당신의 견해는'request'가 아닌'self' (클래스 인스턴스)를 받아 들여야합니다. 요청 객체는'__init__'에 전달됩니다. –