Las plantillas Django ofrecen la etiqueta integrada cycle
para alternar entre varios valores en diferentes puntos de una plantilla (o para el bucle en una plantilla) pero esta etiqueta no se restablece cuando se accede en un ámbito fuera de la definición de cycle
s. Es decir, si tiene dos o más listas en su plantilla, las filas de todas las cuales desea usar algunas definiciones de css odd
y even
, la primera fila de una lista continuará donde la última dejó, no con una nueva iteración de las opciones (odd
y even
)Color de fila alternativa en Django Plantilla con más de un conjunto de filas
por ejemplo, en el código siguiente, si el primer blog tiene un número impar de entradas, a continuación, la primera entrada en un segundo blog se iniciará tan even
, cuando lo quiero a comenzar en odd
.
{% for blog in blogs %}
{% for entry in blog.entries %}
<div class="{% cycle 'odd' 'even' %}" id="{{entry.id}}">
{{entry.text}}
</div>
{% endfor %}
{% endfor %}
He intentado obviar esta colocando un parche con la etiqueta resetcycle
ofrecido aquí:
Django ticket: Cycle tag should reset after it steps out of scope
en vano. (El código no funcionó para mí.)
También traté de mover mi lazo interno a una etiqueta personalizada, pero tampoco funcionó, tal vez porque el ciclo de compilación/renderizado mueve el ciclo de regreso al exterior ¿lazo? (Independientemente de por qué, no funcionó para mí.)
¿Cómo puedo lograr esta simple tarea? Preferiría no crear una estructura de datos en mi opinión con esta información precompilada; eso parece innecesario Gracias por adelantado.
También se puede escribir un poco más corto (al menos en Django 1.3): '{{forloop.counter | divisibleby: 2 | yesno:" par, impar "} } ' – Michael
Bonita mejora, Michael!Nunca he usado mucho el filtro yesno, pero creo que tengo un montón de if/elses en mis plantillas que podrían acortarse de esa manera. –