数据结构
常量(字面量)
支持以下几种字面量
- 布尔值:
true
、false
、True
、False
。 - 整数:例如:
-1
、0
、1
、2
。 - 浮点数:例如:
1.2
、1.0
。 - 字符串:用引号(单引号
"
或者双引号或反字符
,注意一定是英文半角)包裹的文本,前后引号一定要配对。如果内部包括引号自身,外围引号换另外一种引号。例如"欢迎使用'道盒'笔记"
。 - 列表:使用
[
和]
包裹,各项以半角逗号分割的列表,所有列表项必须是同一种类型,允许末尾逗号。例如["abc", "efg",]
。
变量
变量通常定义在模板上下文中,也可以在模板中定义。
变量类型除了包括上面所有字面量类型外,还有对象类型。对象是一种包括一个或多个键值对的形式,键名必须是字符串,值可以是其他任意类型,并且各项之间类型可以不同,同时也可以继续是对象,从而形成嵌套。
变量可以通过{{var_name}}
的形式来渲染输出。
系统全局变量
__publish_context
当前模板的上下文__qs
当前页面查询参数(Query string),包括sitemap.**.qs
配置项,页面参数覆盖同名配置项__cfg
cfg
配置项__page_path
当前页面对应的文件路径__page_path_base
同__page_path
, 但不含扩展名__breadcrumbs
面包屑导航。 数据结构为[{"caption":"", url: ""}]
__lang
设定的语言代码__tpl_path
当前模板路径
点操作符
访问列表时,可以使用var.0
的形式访问第一项,起始编号从0开始。
访问对象时,使用var.key
的形式获取指定key的内容。
方括号操作符
访问列表时,可以使用var[0]
的形式访问第一项。
访问对象时,使用var["key"]
的形式获取指定key的内容。
当需要访问多层级嵌套对象时,可使用多次方括号取出。例如:cities["zhongguo"]["hubei"]["wuhan"]
。操作符后面的内容称作索引,该索引除了可以是用字面量外,有效的的变量也是可以的。
通过以上操作符访问未定义的变量会引发错误。
表达式
支持下面几类表达式
数学运算符
道盒发布可以使用基本的数字运算符,仅允许对数字(整数、浮点数)以及数字变量运算。
+
将左右两个操作数相加。如{{1+2}}
输出3
。-
将左右两个操作数相减。如{{2-1}}
输出1
。*
将左右两个操作数相乘。如{{1*2}}
输出2
。/
将左右两个操作数相除。如{{ 10 / 2 }}
输出5
。%
将左右两个操作数取余。如{{ 2 % 2 }}
输出0
。
运算符优先级:从低到高,同级先计算左边。
+
、-
*
、/
、%
比较运算符
==
两边相等!=
两边不相等>
左边大于右边>=
左边大于或等于右边<
左边小于右边<=
左边小于或等于右边
逻辑运算符
and
逻辑与,两边都为真返回真or
逻辑或,两边有一边为真返回真not
逻辑非,对操作数取反
连接符
连接所有的操作数,操作数包括字符串、数字以及其他标识符(如函数、宏等)
{{ "hello " ~ 'world' ~ `!` }}
{{ an_ident ~ " and a string" ~ another_ident }}
{{ an_ident ~ another_ident }}
in运算符
检查左操作数是否包含在右操作数内。
{{ some_var in [1, 2, 3] }}
{{ 'index' in page.path }}
{{ an_ident not in an_obj }}