将变量扩展到 Jekyll 前端

Expanding variables into Jekyll Front-End

可以将一个变量扩展成post前题吗?

我在模板中使用了 link 的一系列项目,例如:

related_links:
    - text: foo
      link: bar

但有时我需要将其他 post 引用到我的站点中。通常我只会将 /bar 用于 link,但这也被用作播客的 shownotes,我想将 link 扩展为 http://example.com/bar。但是使用 {% post_url YYYY-MM-DD-bar %} 结果为:

 Error: could not read file [REDACTED]: (<unknown>): found character that cannot start any token while scanning for the next token at line 33 column 12

有什么建议吗?

如果你使用

related_links:
    - text: foo
      link: {% post_url YYYY-MM-DD-bar %}

您将收到错误消息,因为 { 将启动流式映射,而 % 无法在 YAML 中启动令牌。您必须将整个标量放在(双)引号中:

related_links:
    - text: foo
      link: "{% post_url YYYY-MM-DD-bar %}"

由于 Jekyll 的管道,你想做的事情不起作用:

  1. 解析 YAML 前端内容
  2. 使用 Liquid 处理文档的其余部分
  3. 用 Markdown 解析上一步的结果

{% post_url YYYY-MM-DD-bar %} 是一个 Liquid 命令。如您所见,Liquid 仅处理文件中 YAML 前端内容下方的部分。因此,那里不会发生 Liquid 替换。

你可以在前面的内容下面写这样的东西:

{% assign link = post_url YYYY-MM-DD-bar %}

然后在别处使用{{link}}。如果您有多个链接,事情就会变得棘手。像这样的东西 可能 有用,但我不是 Liquid 用户,无法确定:

{% capture nl %}
{% endcapture %}
{% capture rawlinks %}
{% post_url YYYY-MM-DD-bar %}
{% post_url YYYY-MM-DD-bar %}
{% endcapture %}
{% assign links = rawlinks | split nl %}

然后您可以在 YAML 前端指定索引:

related_links:
  - text: foo
    linkindex: 0

最后,在您文档的某处:

{{ links[related_link.linkindex] }}

YMMV 如果这种程度的丑陋对于您的用例来说是合理的。

我自己找到了一个更优雅的:

{% assign real_link=link.link %}
{% assign link_start = real_link | slice: 0 %}
{% if  link_start == "/" %}{% assign real_link = real_link | prepend: site.url %}{% endif %}

因为我用 / 开始我的 locak links 以保证 link 将与站点中的根目录相关联,这对我来说是更好的方法.