一尘不染

Django模板中行多于一组的备用行着色

django

Django模板提供了内置标记,cycle用于在模板中不同点(或模板中的for循环)之间的多个值之间交替,但是当在cycles定义之外的范围中访问该标记时,该标记不会重置。即,如果你的模板中有两个或多个列表,则你要使用某些CSS定义odd和所有even列表的行,列表的第一行将在最后一个保留的地方开始,而不是重新进行迭代从(oddeven)中选择

例如,在下面的代码中,如果第一个博客的条目数为奇数,则第二个博客中的第一个条目将以开头even,而我希望它以开头odd

{% for blog in blogs %}
  {% for entry in blog.entries %}
    <div class="{% cycle 'odd' 'even' %}" id="{{entry.id}}">
      {{entry.text}}
    </div>
  {% endfor %}
{% endfor %}

我尝试通过修补resetcycle此处提供的标签来消除这种情况:

无济于事。(该代码对我不起作用。)

我也尝试过将内部循环移到自定义标记中,但这也没有用,也许是因为编译/渲染周期将循环移回了外部循环?(不管为什么,它对我都不起作用。)

我如何完成这个简单的任务!我不希望在此视图中使用预编译的信息来创建数据结构;似乎没有必要。提前致谢。


阅读 385

收藏
2020-04-04

共1个答案

一尘不染

最简单的解决方法(直到修复并应用resetcycle补丁为止)是将内置的“ divisibleby”过滤器与forloop.counter结合使用:

{% for entry in blog.entries %}
  <div class="{% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}" id="{{ entry.id }}">
    {{ entry.text }}
  </div>
{% endfor %}

有点冗长,但不难理解,效果很好。

2020-04-04