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"] %]
- [%thing %] | [%
- request.$thing.list.join(" , ") %] |
+ [% attribute %] | [%
+ request.$attribute.list.join(" , ") %] |
[% END %]
Application configuration
-
- [% FOR thing = config.keys %]
- [%thing %] | [%
- config.$thing.list.join(" , ") %] |
+
+ [% FOR field IN config %]
+ [% field.key %] | [%
+ $field.value.list.join(" , ") %] |
[% END %]