# Accessing data source from shortcode

**URL:** <https://discourse.gohugo.io/t/accessing-data-source-from-shortcode/12509>\
**Category:** support\
**Created:** [June 18, 2018, 7:19pm UTC](https://discourse.gohugo.io/t/accessing-data-source-from-shortcode/12509 "2018-06-18T19:19:44Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![bradbice](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.gohugo.io/bradbice/32/14162_2.png) [@bradbice](https://discourse.gohugo.io/u/bradbice)\
**Post date:** [June 18, 2018, 7:19pm UTC](https://discourse.gohugo.io/t/accessing-data-source-from-shortcode/12509/1 "2018-06-18T19:19:44Z")

</div>

I’m attempting to use a shortcode to capture a term and use that term as a reference to a JSON file I have stored in /data, and then ranging over it to print out its contents.

I’m getting an error:

```auto
error processing shortcode "shortcodes/tokens.html" for page "foundations/tokens.md": template: shortcodes/tokens.html:5:13: executing "shortcodes/tokens.html" at <$data>: range can't iterate over .Site.Data.design_tokens.accordion

```

shortcode template (fed “accordion”)

```auto
{{ $token := .Get "token" }}
{{ $data := ( printf ".Site.Data.design_tokens.%s" $token) }}

<ul>
    {{ range $data }}
    <li>{{ .NAME }}: {{ .VALUE }}</li>
    {{ end }}
</ul>

```

data folder contents:

```auto
data/design_tokens/accordion.json

```

accordion.json

```auto
{
  "ACCORDION_CONTENT_PADDING": "16px",
  "ACCORDION_HEADER_PADDING": "0 16px",
  "ACCORDION_HEADER_HEIGHT_MIN": "40px",
  "ACCORDION_HEADER_BACKGROUND_COLOR": "#e1e1e1",
  "ACCORDION_SECTION_BORDER_SIZE": "1px",
  "ACCORDION_SECTION_BORDER_STYLE": "solid",
  "ACCORDION_SECTION_BORDER_COLOR": "#e1e1e1"
}

```

Does this look broken somehow? $data gets built correctly, but is range not seeing that as a proper data location?

---

<div class="post-metadata">

**Author:** ![bep](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.gohugo.io/bep/32/3332_2.png) [@bep](https://discourse.gohugo.io/u/bep)\
**Post date:** [June 18, 2018, 7:58pm UTC](https://discourse.gohugo.io/t/accessing-data-source-from-shortcode/12509/2 "2018-06-18T19:58:21Z")

</div>

> [@bradbice](#):
>
> {{ $data := ( printf “.Site.Data.design\_tokens.%s” $token) }}

The above creates a string, which is not what you want.

Try:

```auto
{{ $data := index .Site.Data.design_tokens $token }}

```

---

<div class="post-metadata">

**Author:** ![bradbice](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.gohugo.io/bradbice/32/14162_2.png) [@bradbice](https://discourse.gohugo.io/u/bradbice)\
**Post date:** [June 18, 2018, 9:10pm UTC](https://discourse.gohugo.io/t/accessing-data-source-from-shortcode/12509/3 "2018-06-18T21:10:34Z")

</div>

Thank you, @bep. Here’s my fixed version:

```auto
{{ $token := .Get "token" }}
{{ $data := index .Site.Data.design_tokens $token }}
<dl>
{{range $index, $element := $data}}
    <dt>{{ $index }}:</dt>
    <dd>{{ $element }}<dd>
{{ end }}
</dl>

```
