问题
Is there a way to disabling a WRAPPER
that was set in new(\%config), through either the template, or a temporary override with parse()
? I want to have a single default WRAPPER
(that I'll use for 99.9% of my templates), but exclude a few.
I'm doing this all through Catalyst::View::TT
just like the example in the configuration synopsis, except I don't want the WRAPPER
to apply to all of my templates.
回答1:
Edit the wrapper, to include a conditional like:
[% IF no_wrapper OR template.no_wrapper %] [% content %] [% ELSE %]
top;
[% content %]
bottom;
[% END %]
This allows me to disable the wrapper either (1) inside of template, or (2) from the stash.
[%- META no_wrapper = 1 -%]
$c->stash->{no_wrapper} = 1
META var ...;
is a directive that makes var
accessible through the template
hash as template.var
source: http://wiki.catalystframework.org/wiki/gettingstarted/howtos/template_wrappers
回答2:
Define exceptions in site/wrapper
itself, and btw there are exceptions defined there already.
[% IF template.name.match('\.(css|js|txt)');
debug("Passing page through as text: $template.name");
content;
ELSE;
debug("Applying HTML page layout wrappers to $template.name\n");
content WRAPPER site/html + site/layout;
END;
-%]
回答3:
I stumbled into the same problem, and created a more generalized solution that allows for dynamic switching of layouts, or to have no layout at all. See here:
More than one layout/wrapper with Dancer and Template::Toolkit
来源:https://stackoverflow.com/questions/2299561/how-can-i-override-wrapper-in-a-template-toolkit-template-file