In Jekyll need to pass reference to a site data set in front matter – but not as string, but with variable contents

This gives me two very different answers, on the variable of interest, “toc”:

Liquid Code to fetch right menu, based on front matter variable page.series

{% for item in %}
 {% if == page.series %} 
   {% assign menu_type = %}
 {% endif %}
{% endfor %}

Using Capture

{% capture toc %}{{menu_type}}{% endcapture %}

Here toc returns the string:

Note is reference to a YAML file called tree-menus.yml that looks like the below. It is a reference to other YAML files which contain different menu navigations, e.g. Menu 1, Menu 2 (as I need to show a different side menu, depending on what page is loaded – refer to the top most liquid code snippet):

- name: Menu 1
- name: Menu 2

Using Assign

{% assign toc = %}


Here toc returns the the contents of this yaml file, called “tree-menu-1.yml”:

- name: Level 1
  link: /docs/guides/level1.html
- name: 1. Level 2
  link: /docs/level2.html
- name: 2. Level 3
  link: /docs/level3.html

In the final bit of the code, I then pass in toc, to an include, which takes the content of the variable, to generate the Menu (in HTML)

Passing ToC variable into an include

{% include lhsTree.html nav=toc %}


The problem is, the menu only generates using the assign method, and not the capture method.
For example if I do this,

{% assign toc = {{menu_type}} %}
{% include lhsTree.html nav=toc %}

Toc will just be a string, it won’t hold the contents of Menu 1, (and the include will generate nothing. But the include is very happy when I do this

{% assign toc = %}
{% include lhsTree.html nav=toc %}

How can I dynamically generate the correct menu, depending on what page is loaded, as I tried to do using the capture method above?

Go to Source
Author: Sachin