X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole%2FView%2FTT.pm;h=f634ca8fedb7604ef9d97af249bcfc738f746bd7;hb=29550a30ca082a8f1f1d0cb1b4a92eb39bc3dd84;hp=7106b7a563f0d5593fdbe3860752aa488b1b575f;hpb=28823167d12d4cd1419cc6a58900c0fc5819e1af;p=maypole.git diff --git a/lib/Maypole/View/TT.pm b/lib/Maypole/View/TT.pm index 7106b7a..f634ca8 100644 --- a/lib/Maypole/View/TT.pm +++ b/lib/Maypole/View/TT.pm @@ -12,7 +12,6 @@ our $VERSION = 2.11; sub template { my ( $self, $r ) = @_; - unless ($self->{tt}) { my $view_options = $r->config->view_options || {}; $self->{provider} = Template::Provider->new($view_options); @@ -25,17 +24,24 @@ sub template { $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; - } - else { + 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; } } @@ -45,10 +51,15 @@ sub report_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 .= '
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} = "Even the error template @@ -103,6 +114,10 @@ options. Processes the template and sets the output. See L +=item report_error + +Reports the details of an error, current state and parameters + =back =head1 TEMPLATE TOOLKIT INTRODUCTION @@ -384,19 +399,19 @@ the path "[% request.path %]". The error text returned was:

Request details

- - [% FOR thing = ["model_class", "table", "template", "path", +
+ [% FOR attribute = ["model_class", "table", "template", "path", "content_type", "document_encoding", "action", "args", "objects"] %] - + [% END %]
[%thing %] [% - request.$thing.list.join(" , ") %]
[% attribute %] [% + request.$attribute.list.join(" , ") %]

Application configuration

- - [% FOR thing = config.keys %] - +
[%thing %] [% - config.$thing.list.join(" , ") %]
+ [% FOR field IN config %] + [% END %]
[% field.key %] [% + $field.value.list.join(" , ") %]