数据库模板

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 帮助文档中文版)。
关于日期时间格式化有个细节需要:Go 编程语言的格式化比较特殊:不是使用 yyyy-MM-dd HH:mm:ss,而是使用 2006-01-02 15:04:05 这个固定时间格式(知乎讨论)。
 

模板语法

引用其他列参数

直接使用 .列名称 就可以引用数据库其他列作为参数
 

注释语法

变量声明与赋值

流程控制-判断

支持 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 判断

 
 

 
上一篇
数据库介绍
下一篇
自定义字体
Loading...

思源笔记用户指南

文章列表
思源笔记用户指南
🍼新手引导
✏️基础操作
⛓️基础块
🧬高级块
📊数据库
🔡代码片段
🔍搜索进阶
🚀高级操作
💎会员特权
💠功能特性
🖼️主题推荐
🔌常用插件
💬交流区