为什么这个jekyll模板不起作用?

时间:2018-01-09 18:37:01

标签: html jekyll liquid github-pages

简短版本:

为什么当navbox.next_article是字符串'2018-01-05-man-command'时,以下代码不会产生输出?!

{% capture np %} {{ site.posts | where:"post","navbox.next_article contains post.title" }} {% endcapture %}
The next post is {{ np.title }}

详细信息

我的帖子2018-01-05-man-command.md有一个YAML前面的事情:

---
layout : post
title : 'Man Command'
tags : [RHCSA, RHCSA_mod, Using Essential Tools, Man Command]
categories: [RHCSA]
navbox:
#  prev_article:
  next_article: 2018-01-05-understanding-globbing-and-wildcards
---

_includes/post.html文件可通过以下方式访问:

{% unless include.excerpt %}
  {{ post.content }}
  {% include navbox.html navbox=page.navbox %}    
{% endunless %}

_layout/post.html使用它来设置帖子的布局:

{% include post.html post=page link_title=false %}

我的navbox.html包含:

{% assign navbox = include.navbox %}

{% capture np %} {{ site.posts | where:"post","navbox.next_article contains post.title" }} {% endcapture %}
The next post is {{ np.title }}

但是,当我运行bundle exec jekyll serve时,我得到的只有:

  

下一篇文章是

为什么那条线不起作用?我是jekyll的新手所以我有可能在某个地方犯了一个大多数直觉的错误。请告诉我我能解决的问题。

1 个答案:

答案 0 :(得分:1)

我认为capture标记只捕获字符串,而不是帖子。有关详细信息,请参阅here

我不相信where过滤器支持您正在使用的contains语法。有关详细信息,请参阅here

最重要的是,where返回一个数组。你必须得到该数组中的第一项。

您需要解决这些问题。使用assign代替capture来存储帖子。并将您的where过滤器更改为不使用无效的contains语法。 (除非我刚刚链接的问题已添加。)

以下是我的表现:

{% assign post = site.posts | where:"url", targetUrl | first %}