読者です 読者をやめる 読者になる 読者になる

Makoの名前空間機能

Python Mako

<%namespace />で他のテンプレートで定義した関数をインポートできます。
templates/functions.htmlというファイルに必要な関数をまとめておきます。

## -*- coding: utf-8 -*-
## functions.html
<%def name="give_me(something)">
  Give me a ${something}!
</%def>
<%def name="spam()">${give_me("spam")}</%def>
<%def name="egg()">${give_me("egg")}</%def>
<%def name="ham()">${give_me("ham")}</%def>

使用する側は、<%namespace />を使って、"test"という名前でfunctions.htmlをインポートします。
使用する場合は、ドット記法を使ってtest.spam(), test.egg(), test.ham()のようにアクセスします。

## -*- coding: utf-8 -*-
<%namespace file="functions.html" name="test" />
${test.spam()}
${test.egg()}
${test.ham()}

使用者側のローカル名前空間に直にインポートすることもできます。
この場合は、import="*"属性を使います。

## -*- coding: utf-8 -*-
<%namespace file="functions.html" import="*" />
${spam()}
${egg()}
${ham()}

上記の出力例は次のようになります。

  Give me a spam!


  Give me a egg!


  Give me a ham!