模板操作

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做更为详细的了解。

results matching ""

    No results matching ""