将变量扩展到 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 的管道,你想做的事情不起作用:
- 解析 YAML 前端内容
- 使用 Liquid 处理文档的其余部分
- 用 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 将与站点中的根目录相关联,这对我来说是更好的方法.
可以将一个变量扩展成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 的管道,你想做的事情不起作用:
- 解析 YAML 前端内容
- 使用 Liquid 处理文档的其余部分
- 用 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 将与站点中的根目录相关联,这对我来说是更好的方法.