数据结构

常量(字面量)

支持以下几种字面量

  1. 布尔值:truefalseTrueFalse
  2. 整数:例如:-1012
  3. 浮点数:例如:1.21.0
  4. 字符串:用引号(单引号"或者双引号或反字符,注意一定是英文半角)包裹的文本,前后引号一定要配对。如果内部包括引号自身,外围引号换另外一种引号。例如"欢迎使用'道盒'笔记"
  5. 列表:使用[]包裹,各项以半角逗号分割的列表,所有列表项必须是同一种类型,允许末尾逗号。例如["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 }}