diff -Naur Dancer-1.1805/lib/Dancer/Helpers.pm Dancer-1.1806/lib/Dancer/Helpers.pm
--- Dancer-1.1805/lib/Dancer/Helpers.pm	2010-06-22 08:32:04.000000000 +0200
+++ Dancer-1.1806/lib/Dancer/Helpers.pm	2010-06-30 02:00:44.000000000 +0200
@@ -32,10 +32,11 @@
 
 sub template {
     my ($view, $tokens, $options) = @_;
-    $options ||= {layout => 1};
+    $options ||= {layout => 1, before_template => 1};
     my $layout = setting('layout');
     undef $layout unless $options->{layout};
 
+	my $view_t = $view;
     $view .= ".tt" if $view !~ /\.tt$/;
     $view = path(setting('views'), $view);
 
@@ -48,6 +49,13 @@
     }
 
     $tokens ||= {};
+    my $b_template = setting('before_template');
+    undef $b_template unless $options->{before_template};
+	if ($b_template)	{
+		$view_t =~ s/\.tt$//g;
+		Dancer::Route->run_before_template_filters($view_t, $tokens);
+	}
+
     $tokens->{request} = Dancer::SharedData->request;
     $tokens->{params}  = Dancer::SharedData->request->params;
     if (setting('session')) {
diff -Naur Dancer-1.1805/lib/Dancer/Route/Registry.pm Dancer-1.1806/lib/Dancer/Route/Registry.pm
--- Dancer-1.1805/lib/Dancer/Route/Registry.pm	2010-06-22 08:33:47.000000000 +0200
+++ Dancer-1.1806/lib/Dancer/Route/Registry.pm	2010-06-30 02:02:25.000000000 +0200
@@ -11,6 +11,7 @@
     my ($self) = @_;
     $self->{routes} = {};
     $self->{before_filters} = [];
+    $self->{before_template_filters} = [];
 }
 
 # singleton for the current registry
@@ -42,6 +43,28 @@
     push @{ $_registry->{before_filters} }, $compiled_filter;
 }
 
+sub before_template_filters { @{ $_registry->{before_template_filters} } }
+sub add_before_template_filter {
+    my ($class, $filter) = @_;
+
+    my $compiled_filter = sub {
+        return if Dancer::Response->halted;
+        Dancer::Logger::core("entering before_template filter");
+		my $ret = undef;
+        eval { $ret = $filter->(@_) };
+        if ($@) {
+            my $err = Dancer::Error->new(
+                code => 500,
+                title => 'Before_template filter error',
+                message => "An error occured while executing the filter: $@");
+            return Dancer::halt($err->render);
+        }
+		return $ret;
+    };
+
+    push @{ $_registry->{before_template_filters} }, $compiled_filter;
+}
+
 sub routes {
     if ( $_[1] ) {
         my $route = $_registry->{routes}{ $_[1] };
@@ -111,6 +134,11 @@
       ? $new_reg->{before_filters}
       : $orig_reg->{before_filters};
 
+    $merged_reg->{before_template_filters} =
+      (scalar(@{$new_reg->{before_template_filters}}) > 0)
+      ? $new_reg->{before_template_filters}
+      : $orig_reg->{before_template_filters};
+
     Dancer::Route::Registry->set($merged_reg);
 }
 
diff -Naur Dancer-1.1805/lib/Dancer/Route.pm Dancer-1.1806/lib/Dancer/Route.pm
--- Dancer-1.1805/lib/Dancer/Route.pm	2010-06-22 08:32:04.000000000 +0200
+++ Dancer-1.1806/lib/Dancer/Route.pm	2010-06-30 01:59:50.000000000 +0200
@@ -204,6 +204,25 @@
 sub before_filters { Dancer::Route::Registry->before_filters }
 sub run_before_filters { $_->() for before_filters }
 
+sub before_template_filter {
+    my ($class, $filter) = @_;
+    Dancer::Route::Registry->add_before_template_filter($filter);
+}
+sub before_template_filters { Dancer::Route::Registry->before_template_filters }
+sub run_before_template_filters {
+    my ($class, $view, $tokens) = @_;
+
+	return if (!defined($tokens) || ref($tokens) ne "HASH");
+	foreach my $c (before_template_filters)	{
+		my $rh = $c->($view);
+		if ($rh && ref($rh) eq "HASH")	{
+			while(my($k, $d) = each %$rh)	{
+				$tokens->{$k} = $d;
+			}
+		}
+	}
+}
+
 sub build_params {
     my ($class, $handler, $request) = @_;
     $request->_set_route_params($handler->{params} || {});
diff -Naur Dancer-1.1805/lib/Dancer.pm Dancer-1.1806/lib/Dancer.pm
--- Dancer-1.1805/lib/Dancer.pm	2010-06-22 08:37:30.000000000 +0200
+++ Dancer-1.1806/lib/Dancer.pm	2010-06-30 01:42:03.000000000 +0200
@@ -35,6 +35,7 @@
   ajax
   any
   before
+  before_template
   cookies
   config
   content_type
@@ -94,6 +95,7 @@
 sub ajax         { Dancer::Route->add_ajax(@_) }
 sub any          { Dancer::Route->add_any(@_) }
 sub before       { Dancer::Route->before_filter(@_) }
+sub before_template	{ Dancer::Route->before_template_filter(@_) }
 sub cookies      { Dancer::Cookies->cookies }
 sub config       { Dancer::Config::settings() }
 sub content_type { Dancer::Response::content_type(@_) }
diff -Naur Dancer-1.1805/t/05_views/02_before_template_filter.t Dancer-1.1806/t/05_views/02_before_template_filter.t
--- Dancer-1.1805/t/05_views/02_before_template_filter.t	1970-01-01 01:00:00.000000000 +0100
+++ Dancer-1.1806/t/05_views/02_before_template_filter.t	2010-06-30 02:10:05.000000000 +0200
@@ -0,0 +1,50 @@
+use Test::More import => ['!pass'];
+
+BEGIN {
+    use Dancer::ModuleLoader;
+
+    plan skip_all => "Template is needed to run this tests"
+        unless Dancer::ModuleLoader->load('Template');
+};
+
+use Dancer ':syntax';
+use t::lib::TestUtils;
+
+set views => path(dirname(__FILE__), 'views');
+
+set before_template => 1;
+
+ok(before_template(sub {
+	my $view = shift;
+	return {view_name=> $view, h=>"hello", w=>"world"};
+}), 'before_template filter is defined');
+
+my @tests = (
+    { path => '/solo',
+      expected => "before_template:hello world\n" 
+	},
+);
+
+plan tests => scalar(@tests);
+
+SKIP: {
+    Template->import;
+    
+    get '/solo' => sub {
+        template 'before_template';
+    };
+
+    foreach my $test (@tests) {
+        my $path = $test->{path};
+        my $expected = $test->{expected};
+
+        my $request = fake_request(GET => $path);
+
+        Dancer::SharedData->request($request);
+        my $resp = Dancer::Renderer::get_action_response();
+
+		print STDERR $resp->{content};
+    
+        is($resp->{content}, $expected, "content rendered looks good for $path");
+    }
+}; 
diff -Naur Dancer-1.1805/t/05_views/views/before_template.tt Dancer-1.1806/t/05_views/views/before_template.tt
--- Dancer-1.1805/t/05_views/views/before_template.tt	1970-01-01 01:00:00.000000000 +0100
+++ Dancer-1.1806/t/05_views/views/before_template.tt	2010-06-30 02:09:56.000000000 +0200
@@ -0,0 +1 @@
+<% view_name %>:<% h %> <% w %>
