2010-08-01 5 views
4

나는 등 서로 등 여러 템플릿을 가지고 :Mako Templates : 현재 템플릿이 포함되어있는 템플릿의 이름을 찾는 방법은 무엇입니까?

t1.html :

t2.html
... 
<%include file="t2.html" args="docTitle='blablabla'" /> 
... 

:

<%page args="docTitle='Undefined'"/> 
<title>${docTitle}</title> 
... 

그리고 제가하고 싶은이 있음을 확인하는 것입니다 t2는 t1 (또는 다른 이름이 사용할 수 있도록)에 포함됩니다. 문서에 설명 된 특정 방법으로 내 눈을 사로 잡을 수는 없지만 또 다른 인수 (예 : 페이지 이름 = 'foobar')를 전달할 수는 있지만 해킹처럼 느껴집니다.

간단한 .render (blabla) 호출을 사용하여 페이지를 렌더링하는 방법이 있습니까?

+2

마코 (Mako)는 당신이 필요로하는 인트로 스펙 션을 수행 할 방법이 없다고 생각합니다. (적어도 깨끗한 방법은 아닙니다!) "Explicit은 암시적인 것보다 낫다"는 것은 "해킹"과는 거리가 멀다. ** 정상 **, ** 권장 ** 파이썬 접근법이다. 그래서 나는 피하려고 노력하고있는 추가 arg을 가지고 간다. 그것을 전혀 나쁜 해결책이라고 생각하지 마십시오. –

+0

내가 사용중인 앱은'.render()'메소드 대신'rendertemplate (filename ...)'을 사용하므로 템플릿 이름을 매개 변수에 넣는 해당 함수에 대한 래퍼를 만들었습니다. 나는'render' 메소드와 비슷한 것을 할 수 있다고 생각합니다. –

답변

1

내가 말할 수있는 한, mako는 '부모'템플릿에 대한 정보를 제공하지 않습니다. 또한 포함 된 파일로 전달 된 컨텍스트에서 정보 비트를 삭제하는 데 약간의주의가 필요합니다.

따라서 유일한 해결책은 CPython 스택을 사용하여 가장 가까운 mako 템플릿 프레임을 찾고 필요한 정보를 추출하는 것입니다. 그러나 이것은 느리고 신뢰성이 떨어질 수 있습니다. 나는 명시 적으로 이름을 전달하면서 조언을하겠습니다. 나중에 변경 될 수있는 문서화되지 않은 mako 기능에 의존합니다. 템플릿

: 여기서

스택 기반으로 용액 helpers.py에서

${h.get_previous_template_name()} # h is pylons-style helpers module. Substitute it with cherrypy appropriate way. 

(또는 w/E는 cherrypy 적합한)

import inspect 

def get_previous_template_name(): 
    stack = inspect.stack() 
    for frame_tuple in stack[2:]: 
     frame = frame_tuple[0] 
     if '_template_uri' in frame.f_globals: 
      return frame.f_globals['_template_uri'] 

이 뜻 그러나 't1.html'과 같이 전체 URI를 반환합니다. 필요에 맞게 조정하십시오.

관련 문제