获取循环中的下一项

Posted

技术标签:

【中文标题】获取循环中的下一项【英文标题】:Getting the next item in a loop 【发布时间】:2011-12-22 18:19:14 【问题描述】:

我想做的很简单:我有一个模型,我正在运行一个重组循环。现在我想将循环的前 4 项并排显示,然后在下一行继续显示接下来的 4 项,直到列表完成。如果没有更多项目,则该行中的其他单元格可以保持空白。

我试图了解如何在这里使用迭代,但无法弄清楚它如何适合我所拥有的。另外,我认为应该可以以更简单的方式执行此操作...下面我复制了我现在拥有的代码,这显然显示了循环的第一项 4 次,然后是第二项的 4 次,等等。

我知道这个网站上有一些类似的问题,但我无法利用它们为我的问题开发解决方案。我在 Google App Engine 上运行 Python。非常感谢任何帮助!

% regroup communities|dictsort:"in_country" by in_country as community_list %

% for in_country in community_list %
<h2 style="font-size:16px;"> in_country.grouper </h2>

<table cellspacing="0">
% for item in in_country.list|dictsort:"name" %

<tr style="text-align:center;">
 <td  class='community_table'>
    <img src=" item.image " style="height:40px;"><br />
    <a href=' item.url ' style="font-size:10px; margin-left:10px;" TARGET = "_blank"> item.name </a><br />
     item.com_type <br />
     item.in_city <br />
 </td>

 <td  class='community_table'>
    <img src=" item.image " style="height:40px;"><br />
    <a href=' item.url ' style="font-size:10px; margin-left:10px;" TARGET = "_blank"> item.name </a><br />
     item.com_type <br />
     item.in_city <br />
 </td>

 <td  class='community_table'>
    <img src=" item.image " style="height:40px;"><br />
    <a href=' item.url ' style="font-size:10px; margin-left:10px;" TARGET = "_blank"> item.name </a><br />
     item.com_type <br />
     item.in_city <br />
 </td>

 <td  class='community_table'>
    <img src=" item.image " style="height:40px;"><br />
    <a href=' item.url ' style="font-size:10px; margin-left:10px;" TARGET = "_blank"> item.name </a><br />
     item.com_type <br />
     item.in_city <br />
 </td>

% endfor %     
</table>  

% endfor %

【问题讨论】:

这个问题与Python无关。 @DanielRoseman 不同意。该应用程序是用 Python 编写的,它使用 Python 模板引擎,解决方案可能是“在传递给模板之前在 Python 中进行分组”。 【参考方案1】:
<table cellspacing="0">
% for item in in_country.list|dictsort:"name" %

% if forloop.counter0|divisibleby:4 %
<tr style="text-align:center;">
% endif %

 <td  class='community_table'>
    <img src=" item.image " style="height:40px;"><br />
    <a href=' item.url ' style="font-size:10px; margin-left:10px;" TARGET = "_blank"> item.name </a><br />
     item.com_type <br />
     item.in_city <br />
 </td>

% if forloop.counter|divisibleby:4 %
 </tr>
% endif %

% endfor %
</table>

【讨论】:

感谢您的回答。我明白你在做什么,它实际上比我的尝试更合乎逻辑。但是,在尝试代码时会出现错误: TemplateSyntaxError: Invalid filter: 'divisible_by' 顺便说一下,最后的'forloop.counter' 不应该也以 0 结尾(forloop.counter0) 对不起,应该是divisibleby。不,您希望第一个标签仅出现在第 0、4、8 行等上,而最后一个标签出现在第 3、7、11 行等上。 我想通了 :) 它是 divisibleby 而不是 divisible_by。其余的我保持原样。非常感谢! PS。写完以上内容后阅读您的评论 看到问题和答案很有趣,因为我的用例类似:在列表中显示城市类型的项目。我还使用表格进行布局,使用 GAE + Jinja2 进行渲染,使用 django 的 .po 和 .mo 文件的 i18n 库进行本地化。感谢您分享您的做法【参考方案2】:

我建议在将 Python 代码传递给模板之前对行进行分组。你可以使用这样的迭代器来做到这一点:

my_iter = iter(my_list)
grouped = zip(my_iter, my_iter, my_iter, my_iter) # or zip(*[my_iter]*4)

【讨论】:

谢谢尼克。在发布问题之前,我查看了 iter 函数,但我不明白。我想我会回到那个文档:) 再次感谢!

以上是关于获取循环中的下一项的主要内容,如果未能解决你的问题,请参考以下文章

根据前一项的ID获取数组中的下一项[关闭]

Ruby on Rails:获取模型中的下一项

如何使用 Mongoose 获取当前项的下一项和上一项

如何使用 Mongoose 获取当前项的下一项和上一项

如何获取SQL表中的下一条记录

C++ 自定义流操纵器,可更改流中的下一项