液体模板:for循环中的偶数/奇数项目

Posted

技术标签:

【中文标题】液体模板:for循环中的偶数/奇数项目【英文标题】:Liquid templates: even/odd items in for loop 【发布时间】:2012-02-17 07:23:07 【问题描述】:

如果我在 Liquid 中有一个 for 循环(使用 Jekyll),我如何才能只定位偶数(或奇数)项?我试过了:

% for item in site.posts %
    % if forloop.index % 2 == 1 %

但这似乎不起作用。我也试过:

(forloop.index % 2) == 1

和:

forloop.index - (forloop.index / 2 * 2) == 1

【问题讨论】:

【参考方案1】:

我想你会想为此使用循环标签。例如:

% for post in site.categories.articles %
   <article class="% cycle 'odd', 'even' %"></article>
% endfor %

如果您希望每个循环使用不同的 html 标记:

% for item in site.posts %
  % capture thecycle %% cycle 'odd', 'even' %% endcapture %
  % if thecycle == 'odd' %
    <div>echo something</div>
  % endif %
% endfor %

您可以在Liquid for Designers 找到有关它的更多信息,尽管那里的示例并不是特别有用。这个Shopify support thread 也应该有帮助。

【讨论】:

这不是我想要的,但你找到的链接让我得到了真正的答案。我编辑了您的答案以包含我的解决方案。谢谢! 另外,如果我只想使用 CSS,您的解决方案也可以工作,但我想将 site.posts 分成两列,所以只有类切换对我来说是不够的。 是的,我不确定您是否希望使用 CSS。不过很高兴能提供帮助! 您的示例效果很好,尽管我需要在我的一个循环中添加一个偏移量才能让它为我工作。 我得到了答案,但是为什么模数版本不起作用?【参考方案2】:

与Ales Lande's answer 中的Shopify support thread 所说的相反,Liquid 中一个modulo 函数 - 形式为the modulo filter。

有了它,你可以这样做:

% for item in site.posts %
    % assign mod = forloop.index | modulo: 2 %
    % if mod == 0 %
        <!-- even -->
    % else %
        <!-- odd -->
    % endif %
% endfor %

【讨论】:

我比使用cycle 的解决方案更喜欢这个解决方案;使用字符串解决数学问题似乎......很奇怪! 如果您有条件地跳过循环中的任何内容,例如循环通过 site.collections 但试图将“帖子”(标准集合)排除在外,则此解决方案将不起作用。

以上是关于液体模板:for循环中的偶数/奇数项目的主要内容,如果未能解决你的问题,请参考以下文章

用php打出1到100之间的偶数之和,还有奇数之和,还有定义一个变量,用for循环打出来,总共三个

c++用for循环求1~100内的奇数之和,偶数之和

用for循环计算100以内的奇数之和

python利用循环计算50到100中奇数的和和偶数的和?

使用for循环结构编写程序计算1到100之间的奇数之和、偶数之和,输出格式为“1到100奇数和=xxx;

用for循环求1到100的偶数的个数