数据库模板
type
status
date
slug
summary
tags
category
icon
password
数据库模板可通过语法访问、计算并渲染同一条数据中其他属性的值:
- 使用
.action{ .属性名 }
访问视图属性
- 使用
.action{ index . "custom-xxx" }
访问内容块自定义属性
模板使用的是 Go 编程语言的文本模板进行实现,如果你对此有了解的话,可以实现一些程序逻辑在里面,比如比较逻辑、迭代逻辑等。另外,为了避免语法冲突,模板语法使用
.action{action}
(而不是 {{action}}
)我们通过开源项目 Sprig 内置了一些变量和函数来丰富模板。比如可通过
.action{now | date "2006-01-02 15:04:05"}
来渲染当前时间,更多用法请参考 Sprig 帮助文档(中文版)。模板语法
引用其他列参数
直接使用
.列名称
就可以引用数据库其他列作为参数注释语法
变量声明与赋值
流程控制-判断
支持 if 条件判断,当前支持最简单的 bool 类型和 string 类型,定义如下所示。
流程控制-循环
支持 range 循环来遍历 map、slice 中的内容,语法格式如下所示。
在这个 range 循环内,遍历数据通过$index 和$value。还有一种遍历方式,语法格式如下所示。
这种方式无法访问到$index 和$key 的值,需要通过{{.}}来访问对应的$value。那么在这样情况下,在循环体内,外部变量需要使用{{$.}}来访问。
逻辑运算
函数语法 | 函数作用 |
.action{if not .condition} .action{end} | not 非 |
.action{if and .condition1 .condition2} .action{end} | and 与 |
.action{if or .condition1 .condition2} .action{end} | or 或 |
.action{if eq .var1 .var2} .action{end} | eq 等于 |
.action{if ne .var1 .var2} .action{end} | ne 不等于 |
.action{if lt .var1 .var2} .action{end} | lt 小于 |
.action{if le .var1 .var2} .action{end} | le 小于等于 |
.action{if gt .var1 .var2} .action{end} | gt 大于 |
.action{if ge .var1 .var2} .action{end} | ge 大于等于 |
定义局部变量
用法 1:
管道的值将赋给该标签内部的“.”。(注:这里的“内部”一词是指被{{with pipeline}}…{{end}}包围起来的部分,即 T1 所在位置)
用法 2:
如果管道的值为空,“.”不受影响并且执行 T0,否则,将管道的值赋给“.”并且执行 T1。
说明:{{end}}标签是 if、with、range 的结束标签。
sprig 函数
1.加法
addf 两个或多个数相加
add 同上, 但只能整数
2.减法
subf 整数相减
sub 同上, 但只能整数
3.乘法
mulf 整数相乘, 可以两个或多个相乘
mul 同上, 但只能整数
4.除法
divf 同上, 但只能整数
div 整数相除
其他计算常用
maxf 返回浮点数中的最大值
max 返回整数中的最大值
minf 返回浮点数中的最小值
min 返回整数中的最小值
round 返回四舍五入到小数点后给定位数的浮点数值
日期类函数
date 格式化日期
unixEpoch 格式化日期为时间戳
now 当前日期/时间
duration 将给定的秒数格式化为时分秒
durationRound 将持续时间只取最高的单位
date_modify 修改时间/日期, 如果格式错误将返回未修改的日期
must_date_modify 修改时间/日期, 如果格式错误将返回错误
预定义函数
比较函数
布尔函数会将任何类型的零值视为假,其余视为真。
下面是定义为函数的二元比较运算的集合:
为了简化多参数相等检测,eq(只有 eq)可以接受 2 个或更多个参数,它会将第一个参数和其余参数依次比较,返回下式的结果:
比较函数只适用于基本类型(或重定义的基本类型,如”type Celsius float32”)。但是,整数和浮点数不能互相比较。
管道
管道是链接起来的参数、函数或者方法序列,和 Unix 管道一样:
管道允许我们将上一个输出作为参数传递到下一个指令(放在最后),不同元素之间通过
|
分隔。示例,下面代码相当于
c/(a+b)
常见示例
计算日期间隔
计算 日期A
与 日期B
之间的间隔天数
获取 日期A
到今天的天数
.action{div (now.Sub .日期A).Hours 24}
获取自定义属性 attr1 的值
.action{ index ."custom-attr1" }
使用 if 判断
- 引用:
- https://ld246.com/article/1703040304584 (作者:lovelife88)
上一篇
数据库介绍
下一篇
自定义字体
Loading...