2011-04-28 17 views
5

Quizás esto no sea una pregunta, pero ¿cómo se puede utilizar la funcionalidad Django {% cycle %}, o algo similar, cuando no se encuentra en un bucle? Específicamente, tengo una tabla HTML que estoy escribiendo a mano, ya que no es el tipo de cosas que necesita hacer en un bucle. Quiero que las filas se alternen, así:Ciclo de plantilla Django para alternar filas - sin bucle

<tr class="{% cycle 'even' 'odd'%}"></tr> 
    <tr class="{% cycle 'even' 'odd'%}"></tr> 
    <tr class="{% cycle 'even' 'odd'%}"></tr> 

Pero no estoy usando un bucle, por lo que este siempre resulta en even. No quiero una situación en la que quiera insertar una fila más adelante, y luego tenga que cambiar manualmente las clases de todas las filas debajo de ella. ¿Estoy siendo mezquino? ¿Cómo ciclarías sin estar en un bucle?

Respuesta

10

Hay una sección dedicada a la utilización de cycle fuera de los bucles en the docs:

En algunos casos es posible que desee hacer referencia al siguiente valor de un ciclo desde fuera de un bucle. Para ello, basta con dar al ciclo {%}% etiquetar un nombre, utilizando "como", así:

{% cycle 'row1' 'row2' as rowcolors %} 

A partir de entonces, se puede insertar el valor actual del ciclo donde desea en su plantilla al hacer referencia al nombre del ciclo como una variable de contexto. Si desea mover el ciclo al siguiente valor, use nuevamente la etiqueta del ciclo, usando el nombre de la variable. Por lo tanto, la siguiente plantilla:

<tr> 
    <td class="{% cycle 'row1' 'row2' as rowcolors %}">...</td> 
    <td class="{{ rowcolors }}">...</td> 
</tr> 
<tr> 
    <td class="{% cycle rowcolors %}">...</td> 
    <td class="{{ rowcolors }}">...</td> 
</tr> 

seria:

<tr> 
    <td class="row1">...</td> 
    <td class="row1">...</td> 
</tr> 
<tr> 
    <td class="row2">...</td> 
    <td class="row2">...</td> 
</tr> 

Así, en su caso, usted acaba de declarar una vez y luego llamar {% cycle name %} en cada fila.

Cuestiones relacionadas