$ hugo version
Hugo Static Site Generator v0.54.0 darwin/amd64 BuildDate: unknown
$ cat layouts/t/code.html
...
{{- $json := getJSON $path -}}
{{- if eq $action "edit" -}}
{{- $json.nestedMap["action"] = "update" -}}
{{- end -}}
...
<script type="module">
import App from "/code.js";
new App({{ $json.nestedMap | jsonify }});
</script>
$ json.nestedMap是map [string] interface {}
但是错误解析失败,错误字符U + 005B‘[’
感谢任何提示。
答案 0 :(得分:2)
您遇到的错误是因为[
字符是意外字符。
实际上,此语法在模板内不起作用:
$json.nestedMap["action"]
您必须改为使用index
函数来访问地图元素:
index $json.nestedMap "action"
但是,根据AFAIK的语法,您实际上不能设置密钥,而只能访问它。
一种修改模板内部映射的方法是在包装器结构中定义一些方法,然后从模板中调用该方法。
例如:
type mapWrapper struct {
TheMap map[string]interface{}
}
func (m *mapWrapper) SetMapValue(key, value string) string {
m.TheMap[key] = value
return ""
}
然后在模板中:
{{- .SetMapValue "key2" "value2" }}
在操场上的完整工作示例:
答案 1 :(得分:0)
正如@eugenioy所说,没有内置的方法可以执行此操作,因此您需要使用一个函数。
幸运的是,有一个广泛的常用模板函数库,称为Sprig,它提供了:http://masterminds.github.io/sprig/dicts.html