You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by "Daniel Dekany (JIRA)" <ji...@apache.org> on 2017/11/10 15:15:00 UTC
[jira] [Commented] (FREEMARKER-83) Introduce new special variable
"outer_template_name" beside "main_template_name"
[ https://issues.apache.org/jira/browse/FREEMARKER-83?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16247617#comment-16247617 ]
Daniel Dekany commented on FREEMARKER-83:
-----------------------------------------
That "lazy" thing is a bug... It's actually not a lazy evaluation issue, but that by the time the argument list expressions are evaluated, the invoked `#function` is already in the FTL call stack, and `.currentTemplateName` looks at the top of the FTL call stack to figure out where's it called from... ugh. I'm not even sure if I dare to fix this with `incompatible_improvements` set to 2.3.28, as it's quite backward incompatible to do, but maybe.
> Introduce new special variable "outer_template_name" beside "main_template_name"
> --------------------------------------------------------------------------------
>
> Key: FREEMARKER-83
> URL: https://issues.apache.org/jira/browse/FREEMARKER-83
> Project: Apache Freemarker
> Issue Type: Improvement
> Components: engine
> Affects Versions: 2.3.27-incubating
> Reporter: zhouyanming
>
> for example, a.ftl include b.ftl, b.ftl include c.ftl
> || ||current_template_name||outer_template_name||main_template_name||
> |a.ftl|a.ftl|null|a.ftl|
> |b.ftl|b.ftl|a.ftl|a.ftl|
> |c.ftl|c.ftl|b.ftl|a.ftl|
> I need such feature to resolve relative path like <#include> directive.
> BTW:
> .current_template_name is lazy evaluation, is this designed or bug
> {code:title=b.ftl}
> <#function templateName value>
> <#return value/>
> </#function>
> {code}
> {code:title=a.ftl}
> <#include "b.ftl">
> ${templateName(.current_template_name)}
> {code}
> it will print "b.ftl" not "a.ftl", workaround:
> {code:title=a.ftl}
> <#include "b.ftl">
> <#assign current_template_name=.current_template_name>
> ${templateName(current_template_name)}
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)