2010-02-12 11 views
7

Me encontré con un "descuido" interesante en la etiqueta de plantilla de Django {% cycle %}. Esto se ha enumerado como a bug, pero me pregunto si hay una solución para ello.{% cycle%} ¿funciona para bucles anidados?

{% for r1 in range_0_2 %} 
    {% for r2 in range_0_3 %} 
    {{ r1 }}-{{ r2 }}-{{ cycle 'even' 'odd' }} 
    {% endfor %} 
{% endfor %} 

Esto produce:

0-0-even 
0-1-odd 
0-2-even 
1-0-odd 
1-1-even 
1-2-odd 

Debe rendimiento:

0-0-even 
0-1-odd 
0-2-even 
1-0-even 
1-1-odd 
1-2-even 

Respuesta

10

que he notado el mismo problema en mis plantillas.

Se puede utilizar una solución como la siguiente:

{% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %} 
1

yo uso "incluye" para el contenido de bucle interno

{% regroup employee_bypos_list by pos as by_pos %} 
{% for pos_set in by_pos %} 
    <h2>«{{ pos_set.grouper.address }}»</h2> 
    {% with pos_set.list as employee_list %} 
     {% include 'website/employee/_staff_by_post.html' %} 
    {% endwith %} 
{% endfor %} 
+0

FYI, poniendo incluyen dentro de un bucle for puede realmente matar el rendimiento si no son cuidadosos – speedplane