Поиск данных по ключам в Hugo со строкой

Я пытаюсь создать сайт документации API на основе HUGO, который читает схемы 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 я просто могу передать его в качестве ключа для получения этого параметра param: schema["definitions.loginResponse"].

Однако такой удачи в HUGO нет. Я просто не могу найти способ перейти от этой целевой строки к фактическому параметру.

Помогите! Мне что-то не хватает? Неужели я все это делаю неправильно?

Ответ 1

Догадаться! В случае, если кто-то сталкивается с этой проблемой, поиск параметров выполняется просто с помощью функции индекса Hugo.

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

С $target, в родительском контексте, это просто {{ index. $target }} {{ index. $target }}.

Ответ 2

Я думаю, вам нужно использовать dict https://gohugo.io/functions/dict/

Ваша {{ partial "schema" $target }} может быть изменена на {{ partial "schema" (dict "target_name" $target) }}

В части "схема" вы можете получить доступ к значению с помощью "{{.target_name }}"