freemarker include 和 import

lib/my_test.ftl 模板内容以下:函数

<#macto copyright date>

  <p>Copyright (C)${date}Julia Smith.All rights reserved.</p>

</#macro>

<#assign mail = "jsmith@acme.com">

假设想在aWebPage.ftl 中使用这个模板.spa

若是使用code

<#include "/lib/my_test.ftl">

 

会在主命名空间中建立两个变量. 若是再引入同名的变量时就会被后引入的或者新定义的覆盖.这样就不是很好,由于只想让它们在"My Test Library"命名空间中.就须要用 import代替include了blog

<#import "lib/my_test.ftl" as my>

它会为lib/my_test.ftl建立一个新的哈希表变量,就是空的命名空间my,若是在主命名空间有一个变量,名为mail 或者 copyright,就不会引发混乱,由于两个模板使用了不一样的命名空间. 博客

若是 在lib/my_test.ftl 中修改 copyright 以下it

<#macro copyright date>   <p>Copyright (C) ${date} Julia Smith. All rights reserved.   <br>Email: ${mail}</p> </#macro>

而后修改aWebPage,ftl中的内容以下模板

<#import "/lib/my_test.ftl" as my> <#assign mail="fred@acme.com"> <@my.copyright date="1999-2002"/> ${my.mail} ${mail}

输入为class

<p>Copyright (C) 1999-2002 Julia Smith.All rights reserved.

  <br>Email :jsmith@acme.com

</p>

jsmith@acme.com

fred@acme.com

以上说明可能不太好理解  在其余博客上看到一看即懂得解析 摘录再次 方便查看test

 

问题显示:import

 

在inc1.ftl与inc2.ftl中的内容分别是:

<#assign username="刘德华">与<#assign username="张学友">

接着我在hello.ftl模版中用include将inc1.ftl包含进来

<#include "/inc/inc1.ftl">
${username}

此刻获取的结果是:刘德华

 

接着咱们在hello.ftl用include将inc1.ftl与inc2.ftl同时进行包含进来

<#include "/inc/inc1.ftl">
<#include "/inc/inc2.ftl">
${username}

此刻获取的值是:张学友

 

总结:出现这种状况,在两个模版中都分别存在变量名都相同的变量的时候,include包含进来,会进行覆盖,include只时候将其公共的静态文件进行包含,而里面不涉及到内部函数以及变量声明之类的,当涉及到这种问题,咱们就要用import进行导入

 

 

相关文章
相关标签/搜索