【问题标题】:Pass a array subscript value to Jekyll include将数组下标值传递给 Jekyll 包含
【发布时间】:2024-01-02 10:12:01
【问题描述】:

我在 YAML 中定义图像列表:

images:
 - image_1.png
 - image_2.png

我后来想把它用作:

{% include image.html path=page.images[1] %}

image.html包含的内容是

{% assign image = site.data.images[include.path] %}
<figure>
  <img src="/images/{{include.path}}">
  <figcaption>
    <div>{{image.title}}</div>
    <div class="byline">{{image.artist}}</div>
  </figcaption>
</figure>

这不起作用。如果我将page.images[1] 分配给一个变量,我可以使用它。有没有办法让这个工作?

【问题讨论】:

  • 这应该可以工作。你在你的包含中使用include.path 吗?
  • 我发布了包含的内容。
  • 无法重现您的错误。你有存储库网址吗?

标签: yaml jekyll liquid


【解决方案1】:

因此,当我运行您的代码时,我收到以下错误消息:

液体异常:包含标记的语法无效:path=page.images[1] 有效语法:{% include file.ext param='value' param2='value' %} in index.html

看起来 Jekyll 不喜欢包含中使用的括号表示法。我发现 Jekyll 对这些东西非常挑剔,只接受没有修饰符的字符串或液体变量(赋值、捕获)。不确定这是否是最好的解决方法,但我总是在包含之前设置一个额外的变量来处理它。

{% assign image = page.images[1] %}
{% include image.html path=image %}

如果您将其粘贴到您的代码中,它应该可以工作。显然它不是包含图像的最简洁的语法,但它是一种克服 Jekyll 怪癖的方法。如果是直接放图片,可以直接跳过前面的内容,传递图片字符串'image_2.png'

【讨论】:

  • 我想要前面的图片(所以我可以在概览页面上使用它)。完成这项工作的另一种方法是使用对象而不是数组索引{% include image.html path=page.images.image_1.png %}。但是真实的图像路径明显更长,使得代码难以阅读。