import

Page Contents

Synopsis

<#import path as hash>

Where:

  • path:模板的路径。这是一个计算结果为字符串的表达式。 (换句话说,它不必是固定的字符串,也可以是类似profile.baseDir + "/menu.ftl"的东西.)

  • hash:哈希变量的未引用名称,您可以通过它访问名称空间。不是表达。 (如果必须导入动态构造的名称,则必须使用this trick。)

Description

用于收集可用于导入模板的宏,函数和其他变量的集合,这些宏,函数和其他变量在导入的模板中定义。例如,假设您编写了宏以生成一些常用的片段输出,并将它们放入/libs/commons.ftl。然后,在要使用它们的模板中,执行此操作(按惯例,在模板顶部附近,紧靠其他任何import -s):

<#import "/libs/commons.ftl" as com>

稍后在同一模板中,假设您要使用/libs/commons.ftl中定义的copyright宏。然后您可以像这样调用该宏:

<@com.copyright date="1999-2002"/>

请注意上面的宏名称前的com.。在/libs/commons.ftl中定义的所有内容都将在com内部。

从技术上更详细地描述,import首先创建一个新的空namespace,然后在该命名空间内执行使用path参数指定的模板,因此该模板在变量中填充变量(宏,函数等)。然后,将名称空间分配给使用hash参数指定的变量,您可以通过该名称空间访问其内容。命名空间是a hash,因此点运算符可以在上面工作。赋值就像assign指令,也就是说,它在当前名称空间中设置变量。除非导入是在主(最顶部)模板的名称空间中进行,否则哈希变量也会在全局名称空间中创建。

如果您多次使用相同的path调用import,它将创建名称空间并仅在第一次调用import时运行模板。以后的调用只会返回第一次导入模板时创建和初始化的名称空间,并且不会执行导入的模板。

导入模板打印的所有输出都将被忽略(不会在import指令调用的位置插入)。执行导入的模板,以使用变量填充其名称空间,而不写入输出。

path参数可以是相对路径,例如"foo.ftl""../foo.ftl",也可以是绝对路径,例如"/foo.ftl"。相对路径是相对于使用import指令的模板目录的。绝对路径是相对于程序员在配置 FreeMarker 时定义的基础(通常称为“模板的根目录”)。

始终使用/(斜杠)分隔路径组成部分,切勿使用\(反斜杠)分隔。如果您是从本地文件系统加载模板,并且使用反斜杠(例如在 Windows 下),则 FreeMarker 将自动进行必要的转换。

include指令一样,acquisitionlocalized lookup可用于解析路径。

请注意,可以使用“自动导入”设置Configuration自动为所有模板进行常用导入。由于模板可能不会使用所有自动导入的名称空间,因此也可以使用Configuration的“惰性自动导入”设置来使导入延迟(按需)。

如果您不熟悉命名空间,则应阅读:模板作者指南/其他/命名空间

如果不确定是否应使用import或稍微相似的include指令然后看这个