web-dev-qa-db-fra.com

Rechercher des données par clé dans Hugo avec une chaîne

J'essaie de créer un site de documentation d'API basé sur HUGO qui lit les schémas JSON et les imprime au format HTML.

J'y suis presque, mais je suis perplexe sur la manière exacte de transmettre les données que je veux à une partielle. 

Étant donné un fichier de schéma JSON standard, tel que:

{"paths": {
  "/auth/login": {
    "get": {
    "operationId": "login",
    "responses": {
      "200": {
        "description": "",
        "schema": {
          "ref": "#/definitions/loginResponse"
        }
      }
    }
  },
},
"definitions": {
  "loginResponse": {
    "type": "object"
  }
}}

J'aimerais afficher les détails de ce chemin, puis rendre un partiel en utilisant la définition de schéma dans "ref". J'ai trouvé un moyen de lire ce paramètre de référence et de l'analyser dans une référence pour la définition. "Cible" ci-dessous ressemble à:

Cible: .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}}

Le problème est que $target est une chaîne. En Javascript, je pourrais juste le passer comme clé pour obtenir cet objet param: schema["definitions.loginResponse"].

Pas de chance en HUGO, cependant. Je ne peux tout simplement pas trouver le moyen de passer de cette chaîne de clé cible au paramètre réel. 

Aidez-moi! Est-ce que je manque quelque chose d'évident? Est-ce que je vais à ce sujet tout faux?

13
G Amini

Deviner! Au cas où quelqu'un rencontrerait le même problème, la recherche param est effectuée simplement avec la fonction index de Hugo .

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

Avec $target, dans le contexte parent, c'est simplement {{ index . $target }}

1
G Amini

Je pense que vous devez utiliser dict https://gohugo.io/functions/dict/

Votre {{ partial "schema" $target }} peut être changé en {{ partial "schema" (dict "target_name" $target) }}

Dans le partiel "schéma", vous pouvez accéder à la valeur avec "{{ .target_name }}"

0
Phani Kandula