Question

The error I am getting in the development server:

[info] *** Request 2 (0.000/s) [681] [Thu Dec 12 21:05:39 2013] ***
[debug] Path is "homescreen"
[debug] "GET" request for "homescreen" from "192.168.1.100"
[debug] Rendering template "homescreen/homescreen.tt2"
[error] Couldn't render template "homescreen/homescreen.tt2: file error - homescreen/homescreen.tt2: not found"
[error] Couldn't render template "homescreen/homescreen.tt2: file error - homescreen/homescreen.tt2: not found"
[debug] Response Code: 500; Content-Type: text/html; charset=utf-8; Content-Length: 14312
[info] Request took 0.033915s (29.485/s)
.------------------------------------------------------------+-----------.
| Action                                                     | Time      |
+------------------------------------------------------------+-----------+
| /homescreen                                                | 0.000341s |
| /end                                                       | 0.014055s |
|  -> Myproject::View::HTML->process                         | 0.013049s |
'------------------------------------------------------------+-----------'

What I am doing:

I have the following Controller/Homescreen.pm:

package Myproject::Controller::Homescreen;

use strict;
use warnings;
use parent 'Catalyst::Controller';
use Data::Dumper;
use JSON;

__PACKAGE__->config->{namespace} = '';

sub homescreen :Path('/homescreen') :Args(0)  {

        my ( $self, $c ) = @_;
        print STDERR "IN THE HOMESCREEN ACTION\n";


        $c->stash({template => 'homescreen/homescreen.tt2',
                   title => 'Home Screen'
                 });
}

I have the following View/HTML.pm:

package Myproject::View::HTML;
use Moose;
use namespace::autoclean;

extends 'Catalyst::View::TT';

__PACKAGE__->config({
    #Changed default TT extension to TT2
    TEMPLATE_EXTENSION => '.tt2',
    render_die => 1,
});

I have the following lib/Myproject.pm:

__PACKAGE__->config(
    name => 'Myproject',
    # Disable deprecated behavior needed by old applications
    disable_component_resolution_regex_fallback => 1,
    #enable_catalyst_header => 1, # Send X-Catalyst header
);

__PACKAGE__->config(
        #Configure the view
        'View::HMTL' => {
                #Set the location for TT files
                INCLUDE_PATH => [
                        __PACKAGE__->path_to( 'root', 'src' ),
                ],
        },
);


# Start the application
__PACKAGE__->setup();

I then have a root/src/homescreen/homescreen.tt2 withing my Catalyst directory that contains all my html code (eventually it will use the template toolkit,but at the moment it is purely html and javscript code which I know is fine).

The error I get on the application page in my browser is:

Couldn't render template "homescreen/homescreen.tt2: file error - homescreen/homescreen.tt2: not found" 

I have tried using DEBUG => 'undef' in my HTML.pm View to help with debugging, but I don't seem to get any extra output.

There is probably something very obvious I am overlooking but I cannot work out what it is.

Update

I have just noticed the following in the Config section of my browser debug screen:

Config

  do {
  my $a = {
    "Action::RenderView" => {
      ignore_classes => [
                          "DBIx::Class::ResultSource::Table",
                          "DBIx::Class::ResultSourceHandle",
                          "DateTime",
                        ],
      scrubber_func  => sub { ... },
    },
    "disable_component_resolution_regex_fallback" => 1,
    "home" => "/home/fred/Myproject",
    "name" => "Myproject",
    "Plugin::ConfigLoader" => {},
    "Plugin::Static::Simple" => {
      debug => 1,
      dirs => [],
      ignore_dirs => [],
      ignore_extensions => ["tmpl", "tt", "tt2", "html", "xhtml"],   <---- IS THIS SIGNIFICANT AT ALL?
      include_path => [
        bless({
          dirs => ["", "home", "fred", "Myproject", "root"],
          file_spec_class => undef,
          volume => "",
        }, "Path::Class::Dir"),
      ],
      mime_types => {},
      mime_types_obj => bless({}, "MIME::Types"),
      no_logs => 1,
    },
    "root" => 'fix',
    "stacktrace" => { context => 3, verbose => 0 },
    "static" => 'fix',
    "View::HMTL" => {
      INCLUDE_PATH => [
        bless({
          dirs => ["", "home", "fred", "Myproject", "root", "src"],
          file_spec_class => undef,
          volume => "",
        }, "Path::Class::Dir"),
      ],
    },
  };
  $a->{"root"} = $a->{"Plugin::Static::Simple"}{include_path}[0];
  $a->{"static"} = $a->{"Plugin::Static::Simple"};
  $a;
}

I take it this means it is ignoring my template file because it has the .tt2 file extension?

However, I am not setting this ignore_extensions attribute anywhere in my Catalyst project? Is this the cause of my problem or something totally unrelated?

Was it helpful?

Solution

It looks like your configuration isn't taking effect. Try putting your template in root/homescreen/homescreen.tt2 instead of root/src/homescreen/homescreen.tt2, and Catalyst finds it.

Ahh, you have a typo in your lib/Myproject.pm:

__PACKAGE__->config(
        #Configure the view
        'View::HMTL' => {

Try 'View::HTML' instead (notice you have HMTL - wrong spelling).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top