在 Mojolicious 中将变量传递给布局模板
Passing variable to layout template in Mojolicious
我正在尝试使用存储变量设置状态页面的刷新率
所以我在控制器中有以下代码来呈现页面:
my $refreshrate = 10;
$self->stash( refreshrate => $refreshrate);
$self->render();
在 html 模板中我有:
% layout 'refreshLayout', title => 'A title';
% content_for refresh => begin
% end
<div>....body content .../<div>
在布局模板中我有:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
<meta charset="UTF-8"/>
<meta http-equiv="refresh" content="<%= refreshrate %>"/>
.....
<title><%= title %></title>
</head>
<body><%= content %></body>
</html>
我总是以刷新元标记的内容属性中没有值的呈现页面结束。
refreshrate
替换似乎不起作用。
但是 content
和 title
替换都有效。
那么我做错了什么?
当我们在这里时,为什么在布局模板中我们确实使用 <%= content %> (而不是 $content)
而在常规页面的模板中,我们使用更符合逻辑的 <%= $variable %>
布局模板中的替换与主页模板中的替换如何工作?
隐藏值在您的模板中显示为 perl 变量。 (title
是特殊的,因为它也是默认的辅助函数)。
如果你想将刷新率的存储值传递给布局,你必须将它添加到你的 layout()
args:
use Mojolicious::Lite;
get '/' => sub {
my $c = shift;
$c->stash (refreshrate => 10),
$c->render(template => 'foo/bar')};
app->start;
__DATA__
@@ foo/bar.html.ep
% layout 'mylayout', title => 'Hi there',refreshrate => $refreshrate;
Hello World!
@@ layouts/mylayout.html.ep
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
<meta charset="UTF-8"/>
<meta http-equiv="refresh" content="<%= $refreshrate %>"/>
<title><%= $title %></title></head>
<body><%= content %></body>
</html>
中的布局
我正在尝试使用存储变量设置状态页面的刷新率 所以我在控制器中有以下代码来呈现页面:
my $refreshrate = 10;
$self->stash( refreshrate => $refreshrate);
$self->render();
在 html 模板中我有:
% layout 'refreshLayout', title => 'A title';
% content_for refresh => begin
% end
<div>....body content .../<div>
在布局模板中我有:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
<meta charset="UTF-8"/>
<meta http-equiv="refresh" content="<%= refreshrate %>"/>
.....
<title><%= title %></title>
</head>
<body><%= content %></body>
</html>
我总是以刷新元标记的内容属性中没有值的呈现页面结束。
refreshrate
替换似乎不起作用。
但是 content
和 title
替换都有效。
那么我做错了什么? 当我们在这里时,为什么在布局模板中我们确实使用 <%= content %> (而不是 $content) 而在常规页面的模板中,我们使用更符合逻辑的 <%= $variable %> 布局模板中的替换与主页模板中的替换如何工作?
隐藏值在您的模板中显示为 perl 变量。 (title
是特殊的,因为它也是默认的辅助函数)。
如果你想将刷新率的存储值传递给布局,你必须将它添加到你的 layout()
args:
use Mojolicious::Lite;
get '/' => sub {
my $c = shift;
$c->stash (refreshrate => 10),
$c->render(template => 'foo/bar')};
app->start;
__DATA__
@@ foo/bar.html.ep
% layout 'mylayout', title => 'Hi there',refreshrate => $refreshrate;
Hello World!
@@ layouts/mylayout.html.ep
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
<meta charset="UTF-8"/>
<meta http-equiv="refresh" content="<%= $refreshrate %>"/>
<title><%= $title %></title></head>
<body><%= content %></body>
</html>
中的布局