模板操作
Caddy的模板功能可以让你在你的静态网站中添加一些动态的内容,并能帮助你减少重复的网页。例如templates,browse和markdown等指令都支持模板操作。
模板操作只能在支持他的指令上使用,请查阅文档如何使用。
Caddy的模板使用了GO的text/template包中定义的语法,理解text/template将有助于你充分使用模板。但是对于那些不是程序员的人,这里有一份简化的说明。Caddy还添加了一些额外有用的功能。
基本语法
模板操作包含在{{}}
标记之间。模板关键字是区分大小写的。
常用功能
引用其他文件:
{{.Include "path/to/file.html"}} // 没有参数
{{.Include "path/to/file.html" "arg1" 2 "value 3"}} // 使用参数
获取引用文件中的参数:
{{index .Args 0}} // 0 是第一个参数
引用并渲染一个Markdown文件:(不需要markdown中间件)
{{.Markdown "path/to/file.md"}}
显示当前的时间戳:
{{.Now "Monday, 2 Jan 2006"}}
Cookie值:
{{.Cookie "name"}}
头字段的值:
{{.Header "name"}}
访问者的ip:
{{.IP}}
请求的URI:
{{.URI}}
请求的主机:
{{.Host}}
请求的端口信息:
{{.Port}}
请求的方法:
{{.Method}}
请求的路径是否匹配另外一个路径:
{{.PathMatches "/some/path"}}
URL中的一部分:
{{.URL.RawQuery}}
RawQuery 返回查询字符串. 你可以使用Host, Scheme, Fragment, String或 Query来替换RawQuery。获得参数。
环境变量:
{{.Env.ENV_VAR_NAME}}
分割字符串:(从开头或者结尾分割)
{{.Truncate "value" 3}} // "val"
{{.Truncate "value" -3}} // "lue"
字符串替换:
{{.Replace "haystack" "needle" "replacement"}}
当前日期/时间对象:(在与日期相关的函数中有用)
{{.NowDate}}
获取文件的拓展名:
{{.Ext "path/filename.ext"}}
从文件名中剥离出拓展名:
{{.StripExt "filename.ext"}}
剔除html标签留下纯文本:
{{.StripHTML "Shows <b>only</b> text content"}}
小写字符串:
{{.ToLower "Makes Me ONLY lowercase"}}
大写字符串:
{{.ToUpper "Makes me only UPPERCASE"}}
按分隔符分割字符串:
{{.Split "123-456-7890" "-"}}
将值转为数组:
{{.Slice "a" "b" "c"}}
键值映射:(使用子模板等有用)
{{.Map "key1" "value1" "key2" "value2"}}
列出目录中的文件:
{{.Files "sub/directory"}}
内置清理功能
这些功能内置在text/template中,但是你会发现他们很有用。
让HTML安全:(转义特殊字符)
{{html "Makes it <i>safe</i> to render as HTML"}}
让Javascript安全:
{{js "Makes content safe for use in JS"}}
URL转义:(编码查询内容)
{{urlquery "Makes safe for URL query strings"}}
控制语句
If:
{{if .PathMatches "/secret/sauce"}}
Only for secret sauce pages
{{end}}
If-else:
{{if .PathMatches "/secret/sauce"}}
Only for secret sauce pages
{{else}}
No secret sauce for you
{{end}}
If-elseif-else:
{{if .PathMatches "/secret/sauce"}}
Only for secret sauce pages
{{else if eq .URL "/banana.html"}}
You're on the banana page
{{else}}
No bananas or secret sauce
{{end}}
Range:(迭代数据;此示例转储请求头)
{{range $field, $val := .Req.Header}}
{{$field}}: {{$val}}
{{end}}
服务器端注释:
{{/* This isn't sent to the client */}}
比较函数
在“if”语句中使用:
eq
等于ne
不等于lt
少于le
少于等于gt
大于ge
大于等于
或者这些逻辑语句:
not
反转条件or
返回第一个非空或最后一个参数and
返回第一个空参数或最后一个参数
深入阅读
这些只是一些简单的例子,如果你需要更多关于模板操作的功能,请阅读text/template做更为详细的了解。