makoの例とチュートリアルのほとんどは、テンプレートにファイルを使用することを提案しています。
テンプレートが文字列またはデータベースに保存されている場合、継承を使用するにはどうすればよいですか?
出発点として、mako Webサイトのファイルベースの継承例に基づいて変数ベースの継承例を作成しようとしています(後でデータベースベースの例に簡単に変換できます)。
from mako.template import Template
base = """
<html>
<body>
<div class="header">
<%block name="header"/>
</div>
Some body content ...
</body>
</html>
"""
index = """
<%inherit file="base.html"/>
<%block name="header">
this is some header content
</%block>
this is the body content.
"""
base_template = Template(base)
index_template = Template(index)
print index_template.render()
明らかに、これは機能しません。
2番目のテンプレートには、base.htmlがbase_templateであることを知るための何らかの方法が必要です。
この質問は、2009年のmako-discussグループでも行われました。
https://groups.google.com/d/topic/mako-discuss/QiwkRu7rTFQ/discussion
これはマイケルバイエルが答えとして書いたものです:
テンプレートが相互 にアクセスするには、TemplateLookupコレクションが必要です。テンプレートに送信される「lookup=some_lookup」キーワード引数を使用するか、lookup.put( "some template name"、 "your template")を使用してルックアップでテンプレート文字列を直接作成することにより、任意のテンプレートをルックアップに関連付けることができます。
これを適用して実際のPythonコードに変換する方法をまだ理解できませんでした。