简体   繁体   中英

Cannot access liquid object properties (Jekyll)

I am new to Jekyll and am creating a documentation website for one of my projects. I am trying to create a sidebar that displays the current page in the documentation. To store the structure of the documentation, I created the a file in the _data folder called subsections.yml . Here is the file:

- title: Quickstart # Section
  data:
    - Get started # Subsections
    - The basics
- title: API documentation # Another section with subsections
  data:
    - Introduction

Here is an excerpt from the html template file that will be used for pages in the documentation. (liquid template engine):

{% assign subsecs = site.data.subsections | where: 'title', page.section %}

The code above creates a variable called subsecs which is created by reading subsections.yml and filtering out the data on the section the documentation page is about. So if the page's section was Quickstart , the subsecs variable would contain all the data from the Quickstart section from subsecitons.yml . I tested this out with {{ subsecs }} and it worked by outputting:

{"title"=>"Quickstart", "data"=>["Get started", "The basics"]}

However, when I try to access a certain property from this object like title:

{{ subsecs.title }}

nothing is returned. Why is this happening, and how can I access property methods in liquid? The syntax looks correct, bu when I try it, an empty string is rendered.

I tried looking at the liquid documentation, but found nothing other than method.property , which doesn't work for some reason. I also looked at similar SO questions.

The where filter is returning an array.

{% assign subsecs = site.data.subsections | where: 'title', page.section %}
{{ subsecs | inspect }} 

inspect filter prints => [{"title"=>"Quickstart", "data"=>["Get started", "The basics"]}] brackets denotes an array.

You can do:

{% assign subsecs = site.data.subsections | where: 'title', page.section | first %}
{{ subsecs | inspect }}

The first filter extracts the first element of your array.

inspect filter now prints => {"title"=>"Quickstart", "data"=>["Get started", "The basics"]}

You can now access your object's properties like subsecs.title .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM