つーわけで、WebなMVCのVの部分であるHTMLテンプレートも最近のは継承できて当然!となるんでしょうか。
tempitaを久しぶりに使おうと思ってドキュメントを読んでいたら、inheritなる単語を発見しました。
0.3から継承をサポートするようになったようです。
継承のしかたですが、テンプレート内で、{{inherit テンプレート名}}と書くと、指定したテンプレートをレンダリングします。
その際、元のテンプレート内で、{{def}}で定義したブロックを呼び出すことができます。
元のテンプレート内の{{def}}の外にあるコンテンツは、単に無視されるようです。
index.html
layout.html
と用意して、index.htmlをtenpita.HTMLTemplateでレンダリングすれば、
となります。
ところで、デフォルトの親クラスを探す処理が微妙。
この状態で、index.html/layout.htmlを探されても・・・
get_file_template関数があるのですが、元のテンプレートに直接継承テンプレート名を結合してます。
以下のように修正。うまくいきました。
この関数を使うところは、入れ替え可能なので、この内容で関数を作って、tempita.HTMLTemplate.get_templateを差し替えればOKです。
tempitaを久しぶりに使おうと思ってドキュメントを読んでいたら、inheritなる単語を発見しました。
0.3から継承をサポートするようになったようです。
継承のしかたですが、テンプレート内で、{{inherit テンプレート名}}と書くと、指定したテンプレートをレンダリングします。
その際、元のテンプレート内で、{{def}}で定義したブロックを呼び出すことができます。
元のテンプレート内の{{def}}の外にあるコンテンツは、単に無視されるようです。
index.html
{{inherit "layout.html"}}
{{def main}}
ここがメイン
{{enddef}}
layout.html
<html>
<head>
</head>
<body>
{{self.main | html}}
</body>
</html>
と用意して、index.htmlをtenpita.HTMLTemplateでレンダリングすれば、
<html>
<head>
</head>
<body>
ここがメイン
</body>
</html>
となります。
ところで、デフォルトの親クラスを探す処理が微妙。
この状態で、index.html/layout.htmlを探されても・・・
def get_file_template(name, from_template):
path = os.path.join(from_template.name, name)
return from_template.__class__.from_filename(
path, namespace=from_template.namespace,
get_template=from_template.get_template)
get_file_template関数があるのですが、元のテンプレートに直接継承テンプレート名を結合してます。
path = os.path.join(from_template.name, name)
以下のように修正。うまくいきました。
path = os.path.join(os.path.dirname(from_template.name), name)
この関数を使うところは、入れ替え可能なので、この内容で関数を作って、tempita.HTMLTemplate.get_templateを差し替えればOKです。
|