【问题标题】:Cannot access liquid object properties (Jekyll)无法访问液体对象属性 (Jekyll)
【发布时间】:2020-06-06 23:03:22
【问题描述】:

我是 Jekyll 的新手,正在为我的一个项目创建一个文档网站。我正在尝试创建一个在文档中显示当前页面的侧边栏。为了存储文档的结构,我在_data 文件夹中创建了一个名为subsections.yml 的文件。这是文件:

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

这是 html 模板文件的摘录,将用于文档中的页面。 (液体模板引擎):

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

上面的代码创建了一个名为subsecs 的变量,它是通过读取subsections.yml 并过滤掉文档页面所涉及的部分上的数据而创建的。因此,如果页面的部分是 Quickstart,则 subsecs 变量将包含来自 subsecitons.ymlQuickstart 部分的所有数据。我用{{ subsecs }} 对此进行了测试,并通过输出:

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

但是,当我尝试从该对象访问某个属性时,例如标题:

{{ subsecs.title }}

没有返回任何内容。为什么会发生这种情况,我如何在液体中访问属性方法?语法看起来是正确的,但是当我尝试它时,会呈现一个空字符串。

我尝试查看液体文档,但除了 method.property 之外什么也没找到,由于某种原因它不起作用。我还查看了类似的 SO 问题。

【问题讨论】:

    标签: yaml jekyll liquid


    【解决方案1】:

    where 过滤器正在返回一个数组。

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

    inspect 过滤器打印 => [{"title"=>"Quickstart", "data"=>["Get started", "The basics"]}] 括号表示一个数组。

    你可以这样做:

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

    first 过滤器提取数组的第一个元素。

    inspect 过滤器现在打印 => {"title"=>"Quickstart", "data"=>["Get started", "The basics"]}

    您现在可以访问对象的属性,例如 subsecs.title

    【讨论】:

      猜你喜欢
      • 2016-05-10
      • 2011-07-05
      • 1970-01-01
      • 2016-07-22
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多