Perlのポピュラーなテンプレートエンジンフレームワーク。略してTT、あるいはTT2とも呼ばれる。
Template Toolkitを利用することで、プログラムにおける出力の見た目に関するコードとロジックを分離することができ、結果として保守性が高まる。主にウェブアプリケーション、特にMVCアーキテクチャスタイルに則ったアプリケーションで利用すると相性が良い。
オープンソースのMVCフレームワークであるCatalystのViewのコンポーネントは、デフォルトではこのTemplate Toolkitが採用されている。また、国産のオープンソース・フレームワークのSledgeでもTemplate-Toolkitが採用されている。(なおCatalystはViewをHTML::Masonなど他のテンプレートエンジンと切り替えられる。SledgeはHTML::Templateとの選択式。)
Template-Toolkitの特徴の一つは、HTML::Templateなどのテンプレートエンジンとは異なり、View上からオブジェクトに対するメソッドアクセスが可能な点である。
例えばuserオブジェクトのnameメソッドの結果は以下のようなテンプレートにより展開することができる。
<p>My name is [% user.name %].</p>
また、オブジェクトのメソッドと、ハッシュの値を同一の方法でアクセスすることができる。
my $user = { name => 'Mike', };
というハッシュも、先の方法で同様にアクセスすることができる。
ループを回す場合は、
<ul> [% FOREACH item IN items %] <li>This item's title is [% item.title %].</li> [% END %] </ul>
といった具合でアクセスする。
また、展開した値に作用するフィルタを適用することができる。例えばHTMLエスケープ用フィルタは、
[% user.name | html %]
と書くことができる。
あるいは、formの値を自動で埋めるFill-In機能のフィルタ(これは外部プラグインにより提供される)を利用するには、
[% FILTER fillinform fobject => query %] <form action="/login" method="post"> <input type="text" name="username"> <select name="domain"> <option value="example.com">example.com</option> <option value="foobar.com">foobar.com</option> ... </select> </form> [% END %]
といったシンタックスで記述できる。
Template Toolkitは拡張されることを前提とした設計となっているため、処理のさまざまな場所にフックして動きを変更したり、あるいはプラグインによって拡張したりすることが容易である。
CPANにはTemplate Toolkit拡張用の様々なライブラリが登録されており、それらを組み込むことで開発にかかる工数を大幅に削減することができる。