マクロ機能
テンプレートのパーツを共有できます。 ページ毎に異なる部分は、スロットとして定義することで対応できます。
マクロを定義する
マクロを定義するには、metal:define-macro を使います。 例えば、my_template という名前のマクロは次のようになります。
<div metal:define-macro="my_template"> (省略) </div>
マクロを利用する場所では、metal:use-macro を使います。
<div metal:use-macro="my_template" />
外部ファイルのマクロを参照できます。 次の例では、macro-files.html で定義された my_template を読み込みます。
<div metal:use-macro="macro-files.html/my_template" />
マクロ側にスロットを用意する
マクロ側にスロットを用意することができます。 マクロの一部(たいていはコンテンツ部分)を、読み込むテンプレート毎に変更することができます。 テンプレートを共通にし、<title>(の中身)をページ毎に変更する、といったことができます。
マクロ側には、metal:define-slot を利用します。
<title metal:define-slot="mytitle"> Place for the page title </title>
マクロ側には、metal:define-slot を使用します。
<head metal:define-macro="myheader"> <meta http-equiv="content-type" content="text/html; charset=UTF-8" > <title metal:define-slot="mytitle"> Place for the page title </title> (省略) </head>
呼び出し側は、metal:fill-slot を使用します。
<head metal:use-macro="header.html/myheader"> <title metal:fill-slot="mytitle" tal:content="title" /> </head>
共通部分(上の例では、meta の文字コード)は、呼び出し側で一々書かなくても、共通の物が適用されます。