【问题标题】:Jekyll/Liquid Relative URL filter breaks linksJekyll/Liquid 相对 URL 过滤器会破坏链接
【发布时间】:2020-05-25 21:45:21
【问题描述】:

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

在 _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>

不知何故,这会返回当前的帖子网址。

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

这会返回正确的链接,但如果站点位于子目录中则不起作用。

为什么它返回帖子网址?

【问题讨论】:

    标签: jekyll liquid


    【解决方案1】:

    这里有多个问题。

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

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

    需要改写成:

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

    其次,没有全局post 对象。因此{% if post %} 总是会评估为否定。也就是说,它是多余的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 2014-10-20
      • 2017-04-25
      • 2013-12-02
      相关资源
      最近更新 更多