Django模板提供了内置标记,cycle用于在模板中不同点(或模板中的for循环)之间的多个值之间交替,但是当在cycles定义之外的范围中访问该标记时,该标记不会重置。即,如果你的模板中有两个或多个列表,则你要使用某些CSS定义odd和所有even列表的行,列表的第一行将在最后一个保留的地方开始,而不是重新进行迭代从(odd和even)中选择
cycle
odd
even
例如,在下面的代码中,如果第一个博客的条目数为奇数,则第二个博客中的第一个条目将以开头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此处提供的标签来消除这种情况:
resetcycle
无济于事。(该代码对我不起作用。)
我也尝试过将内部循环移到自定义标记中,但这也没有用,也许是因为编译/渲染周期将循环移回了外部循环?(不管为什么,它对我都不起作用。)
我如何完成这个简单的任务!我不希望在此视图中使用预编译的信息来创建数据结构;似乎没有必要。提前致谢。
最简单的解决方法(直到修复并应用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 %}
有点冗长,但不难理解,效果很好。