freeMarker(十二)——模板语言补充知识
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net
1.特殊变量参考
特殊变量是由FreeMarker引擎自己定义的变量。要访问它们, 你可以使用 .variable_name 语法。 比如,你不能仅仅写 version,而必须写.version。
dataModel 代替 data_model。 但是需要知道在相同的模板中,FreeMarker 会对模板语言部分的标识符强制使用驼峰格式 (用户自定义名称是无效的)。支持的特殊变量有:
current_template_name: 当前所在的模板名称(从 FreeMarker 2.3.23 版本开始可用)。 如果模板是在Java中 (通过new Template(null, ...)) 动态创建的, 而不是从后台通过名称 (通过cfg.getTemplate(name, ...))加载的。 那么它可以为空(null)。 迁移说明:如果使用它来替换废弃的template_name, 请注意,如果模板没有名字,那么它是一个长度为0的字符串,而不是空 (null),所以可以在遗留的模板中编写current_template_name!''。data_model:可以用来直接访问数据模型的哈希表。 也就是,使用global指令定义在这里不可见的的变量。error(从 FreeMarker 2.3.1 版本开始可用): 该变量在recover指令 体中可以访问,它存储了我们要恢复错误的信息。globals:可以用来访问全局可访问的变量的哈希表: 数据模型和由global指令创建的变量。请注意,用assign或macro创建的变量不是全局的。 因此当你使用globals时你不能隐藏变量。lang:返回当前本地化设置的语言部分的值。 比如.locale是en_US, 那么.lang是en。locale:返回当前本地化设置的值。 这是一个字符串,比如en_US。 要获取关于本地化字符串值的更多内容,请参考setting指令。locale_object(从 FreeMarker 2.3.21 版本开始可用): 以java.util.Locale对象返回本地化设置的当前值,而不是字符串。 也就是说,当你想要传递一个java.util.Locale对象给Java方法时, 它可以用于代替.locale。(Locale对象会根据object_wrapper设置项的值来被包装。是否真的可以以Locale对象传递该值给Java方法依赖于对象包装器, 但是对象包装器允许你直接调用Java方法不太可能不支持它。)locals:你可以访问局部变量的哈希表 (由local指令创建的变量,还有宏的参数)。main:可以用来访问主命名空间的哈希表。 请注意,像数据模型中的全局变量通过这个哈希表是 不 可见的。main_template_name:顶级模板的名称 (从 FreeMarker 2.3.23 版本开始可用)。(在Java中,这就是Template.process调用的模板) 如果模板是在Java中 (通过new Template(null, ...)) 动态创建出来的,而不是从存储器中以名称加载(通过cfg.getTemplate(name, ...))的, 那么它可以不存在(null)。迁移说明: 如果使用它来替换废弃的template_name, 请注意,如果模板没有名字,那么它是一个长度为0的字符串,而不是空 (null),所以可以在遗留的模板中编写current_template_name!''。namespace:可以用来访问当前 命名空间 的哈希表。 请注意,像数据模型中的全局变量通过这个哈希表是 不 可见的。node(由于历史原因重命名为current_node):可以用访问者模式(也就是用visit,recurse等指令)处理的当前结点。 而且,当使用 FreeMarker XML Ant 任务 时, 它初始存储根结点。now:返回当前的日期-时间。使用示例: "Page generated: ${.now}", "Today is ${.now?date}", "The current time is ${.now?time}"。output_encoding(从 FreeMarker 2.3.1 版本开始可用):返回当前输出字符集的名称。 如果框架封装 FreeMarker 却没有为 FreeMarker 指定输出字符集时这个特殊变量是不存在的。 (程序员可以在 这里... 阅读关于字符集问题的更多内容。)template_name:不要使用它, 因为当使用宏时,它的行为是很奇怪的;使用current_template_name或main_template_name来代替(参考那里的迁移说明)。 给出主模板的名字,如果我们运行包含或导入的模板,那么就是它们的名字。 当调用宏时,那就有些困惑了:宏调用不改变该特殊变量的值,但是当nested被调用时,它会变成模板所属当前命名空间的名字。 (从FreeMarker 2.3.14 版本开始可用)url_escaping_charset(从 FreeMarker 2.3.1 版本开始可用):如果存在, 它存储了应该用于URL转义的字符集的名称。 如果这个变量不存在就意味着没有人指定URL编码应该使用什么样的字符集。 这种情况下,url内建函数 使用特殊变量output_encoding指定的字符集来进行URL编码。 处理机制和它是相同的。(程序员可以在 这里... 阅读关于字符集问题的更多内容。)vars:表达式.vars.foo返回和表达式foo相同的变量。 出于某些原因你不得不使用方括号语法时这是有用的,因为它只对哈希表子变量有用, 所以你需要一个人工创建的父哈希表。比如,要读取有特殊名称的顶层变量可能会把 FreeMarker 弄糊涂,你可以写.vars["A strange name!"]。 或者,使用和变量varName给定的动态名称访问顶层变量你可以写.vars[varName]。请注意,这个哈希表由.vars返回,并不支持?keys和?values。version:返回 FreeMarker 版本号的字符串形式, 比如2.2.8。这可以用来检查你的应用程序使用的是哪个版本的 FreeMarker,但是要注意这个特殊变量在 2.3.0 或 2.2.8 版本之前不存在。 非最终发行版本号在数字包含破折号和进一步信息,比如 2.3.21-nightly_20140726T151800Z.
2.FTL中的保留名称
下面的这些名称不能在非方括号语法中被用作顶层变量 (比如 .vars["in"]),因为这是FTL中的关键字:
true:布尔值"true"false:布尔值"false"gt:比较运算符"大于"gte:比较运算符"大于或等于"lt:比较运算符"小于"lte:比较运算符"小于或等于"as:由少数指令使用in:由少数指令使用using:由少数指令使用
译自 Email: ddekany at users.sourceforge.net
freeMarker(十二)——模板语言补充知识的更多相关文章
- freeMarker(十)——模板语言之内建函数
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.字符串内建函数 这些内建函数作用于表达式左侧的字符串值. 如果左侧 ...
- Selenium系列(十二) - 自动化必备知识之CSS选择器的详细使用
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- (十二)C语言双指针的常见用法
1.用作函数的返回值,比较常见的是返回分配的堆内存地址. 下面用一个例子进行说明下: /******************************************************** ...
- Golang(十二)TLS 相关知识(三)理解并模拟简单代理
0. 前言 前面的介绍我们理解了数字签名等知识,同时学习了 OpenSSL 生成私钥和证书并验证 之前提过我们基于 BitTorrent 协议开发了一个 docker 镜像分发加速插件 中间涉及到了配 ...
- Python3 学习第十二弹: 补充something
python中遇到 *keys, **keys的形式 其实 * 代表传递任意个无名字参数,这些参数通过Tuple访问 >>> def sum(*keys): ret= 0 for i ...
- 20162303石亚鑫 第十二周hash补充博客
要求 利用除留余数法为下列关键字集合的存储设计hash函数,并画出分别用开放寻址法和拉链法解决冲突得到的空间存储状态(散列因子取0.75) 关键字集合:85,75,57,60,65,(你的8位学号相加 ...
- 22-2 模板语言的进阶和fontawesome字体的使用
一 fontfawesome字体的使用 http://fontawesome.dashgame.com/ 官网 1 下载 2 放到你的项目下面 3 html导入这个目录 实例: class最前面的f ...
- 第四篇Django之模板语言
Django之模板语言 一 模板的执行 模板的创建过程,对于模板,其实就是读取模板(其中嵌套着模板的标签),然后将Model中获取的数据插入到模板中,最后将信息返回给用户 def current_da ...
- freeMarker(五)——模板开发指南补充知识
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 模板开发指南补充知识 1. 自定义指令 自定义指令可以使用 macro ...
随机推荐
- Solr In Action 中文版 第一章(四、五)
1.1 功能概览1. 4 最后,让我们再依照以下的分类.高速的过一下Solr的主要功能: ·用户体验 ·数据建模 ·Solr 4的新功能 在本书中.为你的用户提供良好的搜索体验 ...
- 【BZOJ2741】【FOTILE模拟赛】L 分块+可持久化Trie树
[BZOJ2741][FOTILE模拟赛]L Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max( ...
- 【python】-- RabbitMQ Publish\Subscribe(消息发布\订阅)
RabbitMQ RabbitMQ Publish\Subscribe(消息发布\订阅) 1对1的消息发送和接收,即消息只能发送到指定的queue里,但这样使用有些局限性,有些时候你想让你的消息被所有 ...
- Django中日志管理
在settings中设置日志的相关信息,然后再逻辑代码区就可以保存相应的信息了 #简单设置: LOGGING = { 'version': 1, 'disable_existing_loggers': ...
- jQuery:[1]实现图片上传并预览
jQuery:[1]实现图片上传并预览 原理 预览思路 1.当上传对象的input被触发并选择本地图片之后获取要上传的图片对象的URL: 2.把对象URL赋值给实现写好的img标签的src属性 Fil ...
- c的详细学习(10)结构体与共用体的学习(二)
在c语言中,结构体数据类型与共用体数据类型都属于构造类型.共用体与结构体数据类型在定义上十分相似,但它们在存储空间的占用分配上有本质的区别.结构体变量是各种类型数据的集合,各成员占据不同的存储空间,而 ...
- 《程序员代码面试指南》第五章 字符串问题 去掉字符串中连续出现k 个0 的子串
题目 去掉字符串中连续出现k 个0 的子串 java代码 package com.lizhouwei.chapter5; /** * @Description: 去掉字符串中连续出现k 个0 的子串 ...
- nodejs模块之http&&url
我们使用nodejs中的http模块来进行网络操作 一.什么是HTTP协议: 超文本传输协议(HyperText Transfer Protocol)HTTP假定其下层协议提供可靠传输. 因此,任何能 ...
- 剑指offer——不能被继承的类
方法一:通过将类的构造函数和析构函数声明成private来防止子类继承.声明静态的方法来构造和析构类的对象. 但是用起来不是很方便.只能得到在堆上的实例,而不能得到在栈上的实例. 方法二:构造辅助类C ...
- win7 apache+openssl 安装
win7 apache+openssl 安装 博客分类: win7 apache+openssl 安装 win7 apache+openssl 安装 注:附件提供包含apache和openssl的安 ...