将变量扩展到Jekyll前端

时间:2016-09-06 11:28:32

标签: yaml jekyll

可以将变量扩展为帖子Front-Matter吗?

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

related_links:
    - text: foo
      link: bar

但有时我需要在我的网站中引用其他帖子。通常情况下,我只会将/bar用于链接,但这也用作播客中的showotes,我想扩展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

任何提示?

3 个答案:

答案 0 :(得分:0)

如果您使用

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

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

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

答案 1 :(得分:0)

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

  1. 解析YAML前线问题
  2. 使用Liquid处理其余文档
  3. 使用Markdown
  4. 解析上一步的结果

    {% post_url YYYY-MM-DD-bar %}是一个Liquid命令。如您所见,Liquid只处理YAML前面的文件部分。因此,那里没有液体替代品。

    你可以在前面的事情下写下这样的东西:

    {% 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,如果这种丑陋程度适用于您的用例。

答案 2 :(得分:0)

我发现自己更优雅:

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