sub template {
my ( $self, $r ) = @_;
-
unless ($self->{tt}) {
my $view_options = $r->config->view_options || {};
$self->{provider} = Template::Provider->new($view_options);
$self->{provider}->include_path([ $self->paths($r) ]);
my $template_file = $r->template;
+
my $ext = $r->config->template_extension;
$template_file .= $ext if defined $ext;
my $output;
- if ($self->{tt}->process($template_file, { $self->vars($r) }, \$output )) {
- $r->{output} = $output;
- return OK;
+ my $processed_ok = eval{$self->{tt}->process($template_file, { $self->vars($r) }, \$output );};
+ if ($processed_ok) {
+ $r->{output} = $output;
+ return OK;
} else {
+ if ($@) {
+ warn "fatal error in template '$template_file' : $@\n";
+ $r->{error} = "fatal error in template '$template_file' : $@";
+ } else {
+ warn "TT error for template '$template_file'\n" . $self->{tt}->error;
$r->{error} = "TT error for template '$template_file'\n" . $self->{tt}->error;
- return ERROR;
+ }
+ return ERROR;
}
}
my $output;
# Need to be very careful here.
my $tt = Template->new;
+ unless (ref $r->{config}) {
+ warn "no config for this request\n";
+ $error .= '<br> There was a problem finding configuration for this request';
+ $r->{config} ||= {};
+ }
if ($tt->process(\$error_template,
- { err_type => $type, error => $error,
- config => { %{$r->{config}}},
- request => $r, # We have that at least
+ { err_type => $type, error => $error,
+ config => $r->{config},
+ request => $r,
eval{$self->vars($r)} }, \$output )) {
$r->{output} = $output;
if ($tt->error) { $r->{output} = "<html><body>Even the error template
Processes the template and sets the output. See L<Maypole::View::Base>
+=item report_error
+
+Reports the details of an error, current state and parameters
+
=back
=head1 TEMPLATE TOOLKIT INTRODUCTION
<h2> Request details </h2>
-<table>
- [% FOR thing = ["model_class", "table", "template", "path",
+<table>
+ [% FOR attribute = ["model_class", "table", "template", "path",
"content_type", "document_encoding", "action", "args", "objects"] %]
- <tr> <td class="lhs"> [%thing %] </td> <td class="rhs"> [%
- request.$thing.list.join(" , ") %] </td></tr>
+ <tr> <td class="lhs"> [% attribute %] </td> <td class="rhs"> [%
+ request.$attribute.list.join(" , ") %] </td></tr>
[% END %]
</table>
<h2> Application configuration </h2>
-<table>
- [% FOR thing = config.keys %]
- <tr> <td class="lhs"> [%thing %] </td> <td class="rhs"> [%
- config.$thing.list.join(" , ") %] </td></tr>
+<table>
+ [% FOR field IN config %]
+ <tr> <td class="lhs"> [% field.key %] </td> <td class="rhs"> [%
+ $field.value.list.join(" , ") %] </td></tr>
[% END %]
</table>