jekyll for循环不显示帖子的标题

时间:2015-10-30 13:04:01

标签: twitter-bootstrap jekyll

我在_post目录中有一些帖子,我需要使用Bootstrap(并使用Jekyll)在浏览器中显示两列。这是我的代码:

{% capture cant_element %}{{ site.posts.size | divided_by:2 }}{% endcapture %}
{% for i in (0..cant_element) %}
<div class="row">
  <div class="col-md-6">
    {% capture new_i %}{{ i | times:2 }}{% endcapture %}
    {{ new_i }}
    {{ site.posts[new_i].title }}
  </div>
  <div class="col-md-6">
    {% capture new_i_plus %}{{ i | times:2 | plus:1 }}{% endcapture %}
    {{ new_i_plus }}
    {{ site.posts[new_i_plus].title }}
  </div>
</div>
{% endfor %}

我无法看到(在浏览器中)变量new_inew_i_plus但未显示帖子标题(site.posts[new_i_plus].title

为什么呢?谢谢

1 个答案:

答案 0 :(得分:0)

您混淆了captureassign代码。

任何{% capture %}any code here{% endcapture %}都会返回一个字符串。

因此,当您尝试按索引编号获取元素时,例如{{ site.posts[new_i].title }}其中new_i是一个字符串,它就像执行{{ site.posts['0'].title }}一样,并且它不会返回任何内容<{1}}字符串不是索引。

执行'0'之类的作业将返回{% assign new_i = i | times:2 %}(一个数字)。您的Fixnum现在会转换为{{ site.posts[new_i].title }},并会返回一些内容,因为{{ site.posts[0].title }}是一个数字和一个真实的索引。

你的逻辑不会遍历所有帖子(有时)

new_i将返回绝对值。如果你有3个帖子,这将返回1,你的循环将始终忽略具有奇数索引的最后一个帖子。

完成任务的另一种方法

使用liquid iteration tags可以更有效地完成。

{{ site.posts.size | divided_by:2 }}