对变量使用 "link" 和 "post_url"

Use "link" and "post_url" with variables

我想用一些变量来操纵 Liquid/Jekyll 的 "post_url" 标签。这是我想做的两件事:

将结果存入变量

我想将 post_url 的结果存储在一个变量中,目前,这不起作用:

{%- assign _page_url = post_url 2019-05-19-test -%}

_page_url 在这一行之后是空的。 :(

使用变量作为参数

但是主要问题出现在我尝试使用变量作为参数时。 _item.post 是一个变量,它包含一个指向正确 post.

的字符串
{%- post_url _item.post -%}

抛出异常:

Liquid Exception: Could not parse name of post "_item.post" in tag 'post_url'. Make sure the post exists and the name is correct.

Jekyll::Errors::InvalidPostNameError: '_item.post' does not contain valid date and/or title. in /_layouts/page.html Error: Could not parse name of post "_item.post" in tag 'post_url'. Make sure the post exists and the name is correct. Jekyll::Errors::InvalidPostNameError: '_item.post' does not contain valid date and/or title. Error: Run jekyll build --trace for more information.

因为 post_url 是一个 Liquid 标签,您需要以一种首先执行该标签逻辑的方式包含它,以便它可以存储结果。在这些情况下,您可以使用 {% capture %} 而不是 {% assign %}:

{%- capture _page_url -%}
  {% post_url 2019-05-19-test %}
{%- endcapture -%}

至于使用变量作为 post_url 的参数,目前此标签无法做到这一点。查看 tag's code, it takes everything after post_url in the tag literally and attempts to parse it using their defined structure for posts, whereas something like the include tag has an actual step to detect variables and resolve their value. However, it looks like it will be possible in Jekyll 4.0 (see this PR). You may be able to get this behavior now by using the pre-alpha version,虽然它不稳定,因此您可能会在其他地方看到意外行为。

现在 Jekyll 4.0 已经发布,您可以在 {% %} 标记中使用 {{}} 变量:

{%- post_url {{ _item.post }} -%}