(2010/12/03 追記)
__DATA__部分が読み込まれない件に関しては、gfxさんが対応していただいたようです。
http://d.hatena.ne.jp/gfx/20101103/1288801272
(追記終わり)
Text::Xslateというモジュールをチラチラ見かけて気になったので、
Mojolicious::Liteで使うようにしてみました。
Mojoliciousでは、Text::XSlateを使うためにMojoX::Renderer::Xslateというプラグインがあります。
これをcpanmなどでインストールします。
$ cpanm MojoX::Renderer::Xslate
プラグインの読み込みは、下記のようになります。
use Mojolicious::Lite plugin 'xslate_renderer';
renderメソッドなどでは「handler => 'tx'」を引数に渡します。
sub '/' => sub { my $self = shift; $self->render(handler => 'tx'); } => 'index'; __DATA__ @@ index.html.tx <html> ... </html>
実際に動かしてみたのが次のコードになります。
#!/usr/bin/perl use Mojolicious::Lite; plugin 'xslate_renderer'; get '/' => sub { my $self = shift; $self->render( hander => 'tx', title => 'A list of books', books => [ { title => 'Islands in the stream' }, { title => 'Programming Perl' }, ], ); } => 'index'; app->start; __DATA__ @@ index.html.tx <html> <head> <title><: $title :></title> </head> <body> <h1><: $title :></h1> <ul> : for $books -> $book { <li><: $book.title :></li> : } </ul> </body> </html>
上記では、__DATA__にあるデータを読み込むようにしていますが、デフォルトの設定だとうまく読み込まれませんでした。
テンプレートファイルを外部ファイルにした場合はうまくいきました。
__DATA__の方のデータを読み込ませるために、プラグイン読み込み時にData::Section::Simpleモジュールのインスタンスを渡すようにしました。これが正しい対処なのかわかりません。
use Mojolicious::Lite; use Data::Section::Simple; my $vpath = Data::Section::Simple->new()->get_data_section(); plugin 'xslate_renderer' => { template_options => { path => [$vpath] }, };
下記が、実際に動かしてみたコードです。
#!/usr/bin/perl use Mojolicious::Lite; use Data::Section::Simple; my $vpath = Data::Section::Simple->new()->get_data_section(); plugin 'xslate_renderer' => { template_options => { path => [$vpath] }, }; get '/' => sub { my $self = shift; $self->render(handler => 'tx', title => 'A list of books', books => [ { title => 'Islands in the stream' }, { title => 'Programming Perl' }, ], ); } => 'index'; app->start; __DATA__ @@ index.html.tx <html> <head> <title><: $title :></title> </head> <body> <h1><: $title :></h1> <ul> : for $books -> $book { <li><: $book.title :></li> : } </ul> </body> </html>