2011-03-16 3 views
2

우리는 Django 프로젝트에서 Mako Templates를 사용하기로 결정했습니다. 재사용 가능한 많은 앱 (당연히)이 장고 템플릿을 사용할 수 있다고 가정하기 때문에 장고 템플릿도 지원합니다. 장고 템플릿을 Mako에서 렌더링하는 것이 가능하다는 것을 알았지 만, 다른 방법으로 그 템플릿을 사용할 수있는 방법을 찾지 못했습니다.Django 템플릿을 Mako 템플릿 내에서 렌더링하려면 어떻게해야합니까?

방금 ​​django-articles를 Django 템플릿 목록에 추가했습니다. base.html 파일이 오버라이드 된 Django 템플릿이라고 가정합니다. 불행히도, 우리의 주요 사이트는 Mako를 사용하여 만들어졌습니다. 나는 아직 Mako 내에서 host 자신에 대한 장고 템플릿 깨끗한 방법을 알아낼 수 없습니다.

내가 원한다고 생각하는 것은 마코에게 전화를 걸어 '임베디드'를 요청하는 템플릿 태그입니다.

{% render_in_mako 'mako/base.html' 'body' %} 

을 청상 아리`에서 다음으로 :

<%inherit file="mako/base.html"/> 

내가 원하는 것은 장고 템플릿에서 이런 일을 할 수있을 것입니다 :

우리의 마코는 현재 다음과 같이 모든 템플릿 /base.html ':

</head> 
    <body> 
    <%include file="header.html" /> 

    ${next.body()} 

    </body> 
</html> 

누구든지 전에해야 했습니까? 템플릿 태그 작성에 익숙하지 않습니다. 이것이 가능하다고 생각하십니까? 대안은 아마도 Mako에있는 모든 템플릿을 다시 쓰는 것이고, 그것은 나에게 전혀 호소하지 않습니다. 템플릿 태그는 내가 생각하는 Mako를 사용하는 많은 프로젝트에 매우 유용 할 것입니다.

답변

0

좋은 질문입니다! Django의 custom template tags 덕택에 Django 템플릿 내에서 Mako 템플릿을 렌더링 할 수 있습니다. Django 문서는 프로세스를 더 자세히 설명하지만 기본적으로 태그의 입력을 구문 분석하고 인수가 유효한지 확인한 다음 django.template.Node 개체를 만들어야합니다. Node은 템플릿 태그 인수를 처리하고이를 처리하기 위해 render() 메서드를 정의하는 객체입니다. 그러나 HTML 태그를 이스케이프하지 않으려면 템플릿 태그가 반환하는 텍스트를 이스케이프 처리하는 데 특별한주의를 기울여야합니다. 외관상으로는 Django 사람들은 이것을 고려해 보았습니다. 동일한 문서에 "Auto-escaping considerations"이라는 섹션이 있습니다.

템플릿 태그의 입력을 구문 분석하는 방법 (실제로 인수의 유효성을 검사하는 방법)을 파악한 후에 Node.render() 메서드를 정의하면 태그에 지정된 템플릿과 컨텍스트로 Mako의 렌더링 함수를 호출하고 반환 할 수 있습니다. Django 템플릿에 대한 출력. 나는 당신의 설명에 약간 혼란 스러웠다. 그러나 당신이 두 번째 주장으로 '몸'을 사용했을 때. Mako 템플릿과 관련하여 이것은 무엇을 의미합니까? 나는 Mako를 한번도 사용 해본 적이 없다는 것을 인정하지만, 문서를 한눈에 보면 Django 및 Jinja2 시스템과 많은 유사점이있다. 이 가정을 잘못 이해하면 사과드립니다. Django 템플릿 태그를 통해 문서를 만들 수 있다면 이것은 합리적인 작업처럼 보입니다. 행운을 빌어 요!

+0

답장을 보내 주셔서 감사합니다. 진자와 마코는 다소 비슷합니다. 내가 언급 한 body 인자는 Mako 템플릿 내의 함수 호출입니다. Mako의 말은 '파생 된 템플릿 본문 렌더링'을 의미합니다. 파이썬 함수 호출을 사용하여 텍스트 블록 (HTML)을 제공하고 템플릿을 기본으로 사용할 수 있는지 알아 보려면 Mako를 좀 더 살펴볼 필요가 있다고 생각합니다. 나는 이것을 잠시 동안 옆에두고있다. 그러나 그것이 작동하게되면 나는 대답을 게시 할 것이다. 입력 건배. –

+0

@JoshSmeaton, 해명 해줘서 고마워. 나는 당신이 찾고있는 함수가 ['mako.template.Template']라고 생각한다. (http://www.makotemplates.org/docs/usage.html # basic-usage). 이것은 템플릿을 인자로 받아서'Template' 객체를 반환합니다. 이 객체는 주어진 context 인수로 템플릿을 렌더링하는'render()'메소드를 가지고있다. 나의 유일한 관심사는 템플릿이 렌더링 될 때'body()'함수가 기본적으로 실행되는지 여부입니다. 실습 예제를 얻었다면 답안에 코드를 게시 할 것입니다. –

+0

EDIT : Mako 템플릿 상속 구조에 대한 지식이 없으므로 편집하기에 너무 늦게 깨달았습니다. 따라서 $ {next.body}의 동작을 실제로 복제 할 수는 없습니다. –

관련 문제