Цикл шаблона Django для чередующихся строк — без цикла

#django #django-templates

#django #django-шаблоны

Вопрос:

Возможно, это не вопрос, но как вы используете функциональность Django {% cycle %} или что-то подобное, когда вы не находитесь в цикле? В частности, у меня есть HTML-таблица, которую я пишу вручную, поскольку это не то, что вам нужно делать в цикле. Я хочу, чтобы строки чередовались, вот так:

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

Но я не использую цикл, поэтому это всегда приводит к even . Я не хочу ситуации, когда я хочу вставить одну строку позже, а затем вручную изменять классы всех строк под ней. Я просто мелочный? Как бы вы выполняли цикл, не находясь в цикле?

Ответ №1:

В cycle документах есть раздел, посвященный использованию вне циклов:

В некоторых случаях вы можете захотеть обратиться к следующему значению цикла извне цикла. Чтобы сделать это, просто дайте тегу {% cycle %} имя, используя «as», вот так:

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

С этого момента вы можете вставлять текущее значение цикла везде, где захотите, в свой шаблон, ссылаясь на имя цикла как контекстную переменную. Если вы хотите переместить цикл к следующему значению, вы снова используете тег cycle, используя имя переменной. Итак, следующий шаблон:

 <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>
  

выводил бы:

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

Итак, в вашем случае вы бы просто объявили его один раз, а затем вызывали {% cycle name %} для каждой строки.