看看Template::Manual::VMethods模板工具包手册的一部分我没有看到任何方法这样做。同时将undef
分配给变量不起作用 - variable.defined
事实后返回true。如何删除Template Toolkit中的变量?
回答
那么,Google搜索"delete variable" site:mail.template-toolkit.org/pipermail/templates/
带来了来自Felipe Gasper的问题[Templates] Can I “DELETE some_var”?与Petr Danihlik的两个答案。切赫表明:
[% SET foo = 1 %]
[% IF foo.defined %] defined1 [% END %]
[% PERL %]
delete($stash->{foo});
[% END %]
[% IF foo.defined %] defined2 [% END %]
我看着Catalyst::View:TTcode,以了解变量的上下文。
下面的子过程,这是我总结了一点点做渲染工作:
sub render {
my ($self, $c, $template, $args) = @_;
# [...]
my $output; # Template rendering will end here
# Variables interpolated by TT process() are passed inside an hashref
# as copies.
my $vars = {
(ref $args eq 'HASH' ? %$args : %{ $c->stash() }),
$self->template_vars($c)
};
# [...]
unless ($self->template->process($template, $vars, \$output)) {
# [ ... ]
}
# [ ... ]
return $output;
}
TT process()
被称为与$c->stash
变量的副本,所以我们为什么要惹$c->stash
摆脱本地副本?也许我们没有。
此外,TT define()
与其他方法一样,VM方法似乎是为列表构建的。当调用VM方法时,标量会自动提升为单元素列表:也许因为这个原因,IF测试总是返回true。
我做了一些测试用的变量承载引用DBIx::Class::ResultSet
对象,这似乎在测试一个变量的工作:
[%- resultset_rs = undef %]
[%- IF (resultset_rs) %]
<h3>defined</h3>
[%- END %]
第一行删除变量,第二个做适当的测试。
UPDATE
如果你可以在催化剂视图中添加EVAL_PERL => 1
标志,里面config()
变元的,
__PACKAGE__->config({
# ...
EVAL_PERL => 1
});
,那么你可以使用模板[% RAWPERL %]
指令,它给你的Template::Context
直接访问对象:那么你可以删除瓦尔和.defined()
VMethod做正确的事情。
[%- RAWPERL %]
delete $context->stash->{ 'resultset_rs' };
[%- END %]
[%- IF (resultset_rs.defined) %]
<h3>defined: [% resultset_rs %]<h3>
[%- ELSE %]
<h3>undefined: [% resultset_rs %]<h3>
[%- END %]
什么样的变量是你想要undef?一个数组,一个标量? –
标量是:) –
它不工作?你能以意想不到的方式发布一部分代码吗? –
- 1. 有没有办法比较Template Toolkit中的两个变量?
- 2. 如何在Perl的Template Toolkit中追踪“Template process failed:undef error”?
- 3. Perl,Template-Toolkit和SEO
- 4. 如何让Abyss Web Server使用Template Toolkit?
- 5. 如何从Template-Toolkit中的数组中获取元素?
- 6. 如何在不删除变量的情况下删除变量中的数据?
- 7. 如何在Template Toolkit的宏参数中使用HTML过滤器?
- 8. 如何在Template-Toolkit中创建特殊的ROOT_OPS?
- 9. 如何清除/删除缓存变量
- 10. 语句修饰符在Template Toolkit中如何工作?
- 11. 如何使用Template Toolkit从数组中获取元素?
- 12. 如何在Template :: Toolkit中配置模板性能?
- 13. 删除变量
- 14. 删除变量
- 15. ng-template to src的变量
- 16. 我可以使用Template Toolkit找出变量是否是一个数组?
- 17. 删除批量变量中的空格
- 18. 为什么我不能使用Template Toolkit?
- 19. 如何删除代码中的全局可变变量?
- 20. 如何删除全局变量字典?
- 21. 如何从ViewModelLocator中删除ViewModel实例(mvvmlight-toolkit)
- 22. 如何在django-template中只显示特定的变量信息?
- 23. 如何在Catalyst站点上使用多个Template Toolkit TTSite视图?
- 24. 如何使用Template Toolkit打印递归数据结构?
- 25. 如何在Perl的Template Toolkit中只渲染一个特定的`BLOCK`?
- 26. 从变量中删除常量
- 27. 如何使用use-default-template = false处理portlet的删除操作?
- 28. 如何从sql server 2008中的XML变量中删除属性?
- 29. 如何从jsp中的会话变量中删除前导零
- 30. 如何通过Template :: Toolkit中的mod_perl处理程序生成动态内容?
有趣。当我们在TT模板中使用来自存储(Catalyst?)的引用时,我们编写'[%var%]'而不是'[%stash.var%]''。我想知道你是否已经尝试搞乱'[%stash.var%]''。 –
以这种方式引用变量不会带来任何新的可能性,是吗?我无法使用PERL指令,如我找到的答案所示,因为我使用的TT处理器不允许内联Perl。 –