Mojoliciousでrender()のpartialが効かなくなった!

Mojolicious5.xにバージョンアップしたせいです

これからMojoliciousを始める人にはあまり関係のない話かもしれないですが、Mojolicious4.xでテンプレートをレンダーした結果を出力せずに変数に格納したい時、

my $rendered = $self->render('sample-template', partial=>1);

なんて書いていたのですが、これが、Mojolicious5.0から通りません。 通らないというか、エラーにならずに単に1が返って来てしまいます。

このため、partialを常用していたMojolicious4.xの案件を何も考えずに5.xにバージョンアップしてしまった場合、なぜか「1」というだけの内容のメールが届いたり、画面の一部に「1」という表示が出てる、という問題に遭遇することがあります。(経験済み)

どうしたら!

もちろん代替策はあります。 ひとつはMojolicious4.xに戻すことですが、そんな無粋なことをしたくない場合は、render_to_string()に差し替えましょう。

my $rendered = $self->render_to_string('sample-template');

まぁ確かにpartial=>1するよりは人道的になったような気もしますね。

おまけ

尚、上記いずれの場合でも返り値はMojo::ByteStreamとなっており、そのまま文字列として処理してもいいですが、->でチェーンしてHTMLエスケープやら色々できます。

my $rendered = $self->render_to_string('smple-template')->xml_escape; # html_escapeというのは無い。

確認したバージョン

  • Mojolicious 4.83
  • Mojolicious 5.40

参考にさせていただいたサイト