使用字符串在Hugo中按键查找数据

G A*_*ini 14 schema templates json go hugo

我正在尝试创建一个基于HUGO的API文档站点,该站点读取JSON模式,并以HTML格式打印它们.

我几乎就在那里,但我很难知道如何传递我想要的部分数据.

给定标准JSON模式文件,如下所示:

{"paths": {
  "/auth/login": {
    "get": {
    "operationId": "login",
    "responses": {
      "200": {
        "description": "",
        "schema": {
          "ref": "#/definitions/loginResponse"
        }
      }
    }
  },
},
"definitions": {
  "loginResponse": {
    "type": "object"
  }
}}
Run Code Online (Sandbox Code Playgroud)

我想显示该路径的详细信息,然后使用"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}}
Run Code Online (Sandbox Code Playgroud)

麻烦的是,$target是一个字符串.在Javascript中,我只能将其作为获取该对象参数的密钥传递:schema["definitions.loginResponse"].

然而,在HUGO没有这样的运气.我根本找不到从目标键字符串到实际参数的方法.

救命!我错过了一些明显的东西吗 我错了吗?

小智 0

我认为你需要使用字典https://gohugo.io/functions/dict/

你的{{ partial "schema" $target }}可以改为{{ partial "schema" (dict "target_name" $target) }}

在“模式”部分中,您可以使用以下方式访问值"{{ .target_name }}"