我想从模板内部访问Mojolicious中的模板名称以进行调试,就像Template Toolkit一样(参见这里)
变量__FILE__工作得很整齐,但它引用的是当前文件,而不是顶级模板,这意味着它在布局模板中无用.
我也试过了
<%= app->renderer->template_name %>
Run Code Online (Sandbox Code Playgroud)
但没有结果
在Mojolicious有可能吗?
这可以通过两种略有不同的方式来完成:
首先添加一个before_render钩子并设置一个变量。将其全部打包到插件中很容易,如下所示:
package Mojolicious::Plugin::TemplateName;
use Mojo::Base 'Mojolicious::Plugin';
sub register {
my ($self, $app, $conf) = @_;
$app->helper('template' => sub { return shift->stash('mojo.template') });
$app->hook(before_render => sub {
my $c = shift;
$c->stash('mojo.template', $_[0]->{template} )
});
}
1;
Run Code Online (Sandbox Code Playgroud)
并在这样的模板中使用它
<%= template %>
Run Code Online (Sandbox Code Playgroud)
其次,它可以在模板内部完成 - 通过在模板本身内部设置变量:
% stash('template', __FILE__);
Run Code Online (Sandbox Code Playgroud)
然后在布局中重用该变量:
<%= $template %>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您将获得带有后缀的文件名和所有内容 - 而不仅仅是模板。
受到有关模板由内而外渲染的答案的启发。
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |