在 Hugo 中用字符串按键查找数据
Posted
技术标签:
【中文标题】在 Hugo 中用字符串按键查找数据【英文标题】:Looking up data by key in Hugo with a string 【发布时间】:2019-02-16 12:51:03 【问题描述】:我正在尝试创建一个基于 HUGO 的 API 文档站点,该站点读取 JSON 模式,并以 html 格式打印它们。
我快到了,但我不知道如何准确地传递我想要的部分数据。
给定一个标准的 JSON 模式文件,如下所示:
"paths":
"/auth/login":
"get":
"operationId": "login",
"responses":
"200":
"description": "",
"schema":
"ref": "#/definitions/loginResponse"
,
,
"definitions":
"loginResponse":
"type": "object"
我想显示该路径的详细信息,然后使用“ref”中的架构定义呈现部分。我找到了一种方法来读取该 ref 参数并将其解析为定义的参考。下面的“目标”如下所示:
目标:.definitions.loginResponse
range $path, $methods := .paths
<h4> $path </h4>
range $method, $items := $methods
<h5> $method </h5>
<ul>
range $status, $info := .responses
<li>
<div> $status </div>
<h6>Ref: $info.schema.ref </h6>
<p>Target: $target := (printf ".definitions.%s" (index (findRE "[^/]+(/?$)" $info.schema.ref) 0))</p>
<div> partial "schema" $target </div>
</li>
end
</ul>
end
end
问题是,$target
是一个字符串。在 javascript 中,我只需将其作为获取该对象参数的键传递:schema["definitions.loginResponse"]
。
但是,在 HUGO 中没有这样的运气。我根本找不到从该目标键字符串到实际参数的方法。
帮助!我错过了一些明显的东西吗?我是不是搞错了?
【问题讨论】:
你能分享更多目录结构的细节吗? json 文件是否在“数据”目录中?您如何到达调用部分的地步?你在创造一种新的类型吗? JSON 模式文件在 /data,模板在 /layouts/_default,模式部分在 /layouts/partials。我能够从架构中获取数据以及渲染模板和部分,我根本无法将数据传递给部分。 【参考方案1】:我认为你需要使用 dict https://gohugo.io/functions/dict/
您的 partial "schema" $target
可以更改为 partial "schema" (dict "target_name" $target)
在“模式”部分中,您可以使用" .target_name "
访问值
【讨论】:
感谢您的浏览!看来,使用这个,“模式”部分得到一个看起来像这样的新地图:"target_name": ".definitions.loginResponse"
不幸的是,我仍然无法使用该字符串查找数据。我非常希望能够做到这一点:schema["definitions.loginResponse"]
!【参考方案2】:
想通了!如果有人遇到同样的问题,只需使用 Hugo 的 index function 即可完成参数查找。
$target := index $info.schema "$ref" | findRE "[^/]+(/?$)"
对于$target
,在父上下文下,它只是 index . $target
。
【讨论】:
以上是关于在 Hugo 中用字符串按键查找数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在VB中用PostMessage向指定窗口发送带有修饰键的组合键?