Yaml 将变量扩展到Jekyll前端

Yaml 将变量扩展到Jekyll前端,yaml,jekyll,Yaml,Jekyll,是否有可能将一个变量扩展为一个后前沿问题 我使用一系列项目链接到我的模板中,如: related_links: - text: foo link: bar 但有时我需要在我的网站上引用其他帖子。通常我只会在链接中使用/bar,但这也被用作播客中的shownotes,我想扩展http://example.com/bar。但是使用{%post_url YYYY-MM-DD-bar%}会导致: Error: could not read file [REDACTED]: (&l

是否有可能将一个变量扩展为一个后前沿问题

我使用一系列项目链接到我的模板中,如:

related_links:
    - text: foo
      link: bar
但有时我需要在我的网站上引用其他帖子。通常我只会在链接中使用
/bar
,但这也被用作播客中的shownotes,我想扩展
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
错误:无法读取文件[REDACTED]:():在第33行第12列扫描下一个标记时发现无法启动任何标记的字符
有什么建议吗?

如果您使用

related_links:
    - text: foo
      link: {% post_url YYYY-MM-DD-bar %}
您将收到一个错误,因为
{
将启动流样式映射,
%
无法在YAML中启动令牌。您必须将整个标量放在(双)引号中:

如果你使用

related_links:
    - text: foo
      link: {% post_url YYYY-MM-DD-bar %}
您将收到一个错误,因为
{
将启动流样式映射,
%
无法在YAML中启动令牌。您必须将整个标量放在(双)引号中:


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

  • 解析YAML前沿物质
  • 用液体处理文件的其余部分
  • 使用标记分析上一步的结果
  • {%post\u url YYYY MM DD bar%}
    是一个Liquid命令。正如您所看到的,Liquid只处理YAML前端下面的文件部分。因此,在那里不会发生Liquid替换

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

    {% assign link = post_url YYYY-MM-DD-bar %}
    
    related_links:
      - text: foo
        linkindex: 0
    
    然后在其他地方使用
    {{link}
    。如果你有多个链接,事情会变得很糟。类似的方法可能会奏效,但我不是一个流动用户,无法确定:

    {% capture nl %}
    {% endcapture %}
    {% capture rawlinks %}
    {% post_url YYYY-MM-DD-bar %}
    {% post_url YYYY-MM-DD-bar %}
    {% endcapture %}
    {% assign links = rawlinks | split nl %}
    
    然后,您可以在YAML前端中指定索引:

    {% assign link = post_url YYYY-MM-DD-bar %}
    
    related_links:
      - text: foo
        linkindex: 0
    
    最后,在您的文档中的某个地方:

    {{ links[related_link.linkindex] }}
    

    YMMV,如果这种丑陋程度适合您的用例。

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

  • 解析YAML前沿物质
  • 用液体处理文件的其余部分
  • 使用标记分析上一步的结果
  • {%post\u url YYYY MM DD bar%}
    是一个Liquid命令。正如您所看到的,Liquid只处理YAML前端下面的文件部分。因此,在那里不会发生Liquid替换

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

    {% assign link = post_url YYYY-MM-DD-bar %}
    
    related_links:
      - text: foo
        linkindex: 0
    
    然后在其他地方使用
    {{link}
    。如果你有多个链接,事情会变得很糟。类似的方法可能会奏效,但我不是一个流动用户,无法确定:

    {% capture nl %}
    {% endcapture %}
    {% capture rawlinks %}
    {% post_url YYYY-MM-DD-bar %}
    {% post_url YYYY-MM-DD-bar %}
    {% endcapture %}
    {% assign links = rawlinks | split nl %}
    
    然后,您可以在YAML前端中指定索引:

    {% assign link = post_url YYYY-MM-DD-bar %}
    
    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链接以保证链接将与站点中的根相关时,这对我来说是一个更好的方式。

    我发现自己的链接更优雅:

    {% 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链接以保证链接将与站点中的根相关时,这对我来说是一种更好的方式。

    但是通过使用这个,我收到了文字
    {%post\u url YYYY-MM-DD-bar%}
    在链接中。我想要的是让Jekyll解析并获得链接。通过将标量放在双引号中,它将扩展到
    example.com/posts/baz/
    {%post\u url yyyyy-MM-DD-bar%}`但是通过使用它,我收到了文本
    {%post\u-url YYYY-MM-DD-bar%}
    在链接中。我要做的是让Jekyll解析并获得链接。通过将标量放在双引号中,它将扩展到
    example.com/posts/baz/
    {%post\u url yyyyy-MM-DD-bar%}`这个{link}解决方法甚至在前端也能工作……如果这个方法有效,这将是一个很好的解决方案。这个{{link}即使在最前面的问题上,变通方法也能起作用……如果这能起作用,这将是一个很好的解决方案。