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

时间:2018-09-12 00:09:28

标签: json templates go schema hugo

我正在尝试创建一个基于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"]

但是,雨果没有这种运气。我根本找不到从该目标键字符串到实际参数的方法。

帮助!我是否缺少明显的东西?我要把这都弄错了吗?

1 个答案:

答案 0 :(得分:1)

想通了!万一有人遇到同样的问题,只需使用Hugo的index function即可完成参数查找。

{{ $target := index $info.schema "$ref" | findRE "[^/]+(/?$)" }}

对于$target,在父级上下文中,它仅仅是{{ index . $target }}