How to use common template for mojolocious lite app?
-
26-07-2021 - |
Question
use Mojolicious::Lite;
# /with_layout
get '/a' => sub { my $self = shift;} ;
get '/b' => sub { my $self = shift;} ;
get '/c' => sub { my $self = shift;};
app->start;
__DATA__
@@ a.html.ep
<!DOCTYPE html>
<html>
<head><title><%= title %></title></head>
<body><%= content %></body>
<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>
</html>
@@ b.html.ep
<!DOCTYPE html>
<html>
<head><title><%= title %></title></head>
<body><%= content %></body>
<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>
</html>
@@ c.html.ep
<!DOCTYPE html>
<html>
<head><title><%= title %></title></head>
<body><%= content %></body>
<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>
</html>
I am really moved
<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>
and use all the html rather adding into each html
La solution
Use the layout template feature.
use Mojolicious::Lite;
# /with_layout
get '/a' => sub { my $self = shift;};
get '/b' => sub { my $self = shift;};
get '/c' => sub { my $self = shift;};
app->start;
__DATA__
@@ a.html.ep
% title 'A';
% layout 'template';
Content for 'A'
@@ b.html.ep
% title 'B';
% layout 'template';
Content for 'B'
@@ c.html.ep
% title 'C';
% layout 'template';
Content for 'C'
@@ layouts/template.html.ep
<!DOCTYPE html>
<html>
<head><title><%= title %></title></head>
<body><%= content %></body>
<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>
</html>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow