Jekyll/Liquid 相对 URL 过滤器中断链接

Jekyll/Liquid Relative URL filter breaks links

我正在尝试在我的 Jekyll 主题的大部分 link 中使用 relative_url,所以如果有人想让这个主题在子目录中工作,他可以​​做到。 我对 post 的类别列表有疑问,每个类别都应 link 存档。

在 _layouts/post.html 我有这个代码:

{% if site.data.settings.categories.active %}
  {% include categories.html %}
{% endif %}

categories.html 有这个代码:

<div class="categories">
    <span><p>Categories:</p>
    {% if post %}
      {% assign categories = post.categories %}
    {% else %}
      {% assign categories = page.categories %}
    {% endif %}
    {% for category in categories %}
      <a href="{{ "/categories/#{{category | slugify}}" | relative_url}}">{{category}}</a>
      {% unless forloop.last %}&nbsp;{% endunless %} 
    {% endfor %}
  </span>
</div>

这是问题所在:

 <a href="{{ "/categories/#{{category | slugify}}" | relative_url}}">{{category}}</a>

不知何故,这 returns 当前 post url。

<a href="/categories/#{{category | slugify}}">{{category}}</a>

这 returns 是正确的 link,但如果站点位于子目录中则不起作用。

为什么会 returns post url?

这里有多个问题。

首先,Liquid 不会计算嵌套结构。 因此,如下代码:

{{ "/categories/#{{category | slugify}}" | relative_url}}

需要重写为:

{% capture url %}/categories/{{ category | slugify }}{% endcapture %}
{{ url | relative_url }}

其次,没有全局post对象。因此 {% if post %} 总是会被评估为负数。即,它是多余的。