2014-04-14 2 views
0

피라미드 프레임 워크를 배우고 있습니다.피라미드 프레임 워크에서 상위 템플릿 사용하기

지금까지 각보기에 대해 별도의 템플릿을 만들 수 있습니다.

하지만 모두 동일한 헤드 콘텐츠를 가지고 있습니다.

그렇다면 피라미드에서 상위 템플릿을 정의하는 가장 일반적인 방법은 무엇입니까? 나는 그 방법을 좋아하지 않아

@subscriber(BeforeRender) 
def add_base_template(event): 
    base = get_renderer('templates/base.pt').implementation() 
    event.update({'base': base}) 

그러나 :

나는 피라미드 이벤트와 그것을 달성하는 방법이 있다는 것을 발견했다.

답변

1

피라미드 이벤트를 사용하지 않으려면 여기를 클릭하십시오. 피라미드의 기본 템플릿 언어는 Chameleon으로, 사용하는 것처럼 보이지만 Mako 또는 다른 템플릿 언어를 쉽게 사용할 수 있습니다. 요점 : Pyramid에서 부모 템플릿을 정의하는 표준 방법은 없습니다. 사용하는 템플릿 언어에 상관이 없기 때문입니다.

표준 방식으로 카멜레온은 다음과 유사합니다.

먼저, 기본 템플릿 main.pt :

:

<html> 
    <head>             
    Something generic in here... 
    </head> 
<body> 
<h1>${document.title}</h1> 

<div id="content"> 
    <metal:content define-slot="content" /> 
</div> 
</body> 
</html> 

예 다음 child.pt 먼저로드 상위 템플릿과는 콘텐츠 슬롯을 채운다

<metal:main use-macro="load: main.pt"> 
    <p metal:fill-slot="content">${structure: document.body}<p/> 
</metal:main> 

가능한 피라미드 뷰 기능 :

@view_config(route_name='view_document', renderer='child.pt') 
def document_view(request): 
    foo = Document(title="bar", content="silly example") 
    return {'document': foo} 

물론, 여기서는 Document 클래스를 다른 곳에서 정의했다고 가정합니다. 피라미드 코드에는 하위 템플릿 만 언급되어 있습니다. 내 VIEW_DOCUMENT 기능은 문서 객체를 다음 차례로 main.pt 템플릿을 호출 child.pt 템플릿에 foo는를 전달합니다.

+0

이것은 내가 정확히 찾고 있었던 것입니다. 덕분입니다. – user2846569

1

이 질문은 레이아웃을 논의하는 피라미드 튜토리얼에서 답변 해드립니다. 매크로를 요구하지 않았지만 현재 탐구하고있는 주제 중 하나입니다. Creating a Custom UX for Pyramid - Layouts

레이아웃을 사용하여 고급 개념 왜

  • 가 대답한다. 그러나이 아이디어의 구현은 프로젝트의 요구 사항과 개발자의 기술에 따라 달라질 수 있습니다.

    나는 내 자신의 프로젝트에 레이아웃을 사용하고 템플릿의 로딩을 관리 할 수있는 카멜레온 지침에 대한 지식이 필요하지 않습니다. 이것은 피라미드 애드온 패키지 pyramid_chameleon에 캡슐화되어 있습니다.

관련 문제