Django: Счетчик Forloop 0, кратный 3, работает неправильно

ПЛАТФОРМА: Django

Проблема. При использовании {% forloop.counter0|divisibleby:3 %}, похоже, не происходит правильного деления? Я не могу понять, что происходит.

Гол Отображение HTML-шаблона Avery с предварительно заполненной информацией из базы данных. 3-х колоночная таблица с переменными строками.

Код

<table>
    {% for job in jobsite %}
        {% if forloop.counter0|divisibleby:3 %}<tr>{% endif %}

        <td>{{ job.name }}<br/>{{ job.address }}<br/>{{ job.address_2 }}{% if job.address_2 %}<br/>{% endif %}{{ job.city }}, {{ job.state }} {{ job.zip }}</td>

        {% if forloop.counter < 3 %}
            <td class="spacer" rowspan="0">&nbsp;</td>
        {% endif %}

        {% if forloop.counter0|divisibleby:3 or forloop.last %}<tr>{% endif %}
    {% endfor %}
</table>

Почему это не удается? What's going on here?

Дополнительная информация Я могу приблизиться к этому, если изменю код на следующий. Проблема заключается в том, что счетчик 2 пуст. Если я заполняю данные, они дублируются (строка 1 столбец 2, строка 1 столбец 3):

<table>
    <tr>
    {% for job in jobsite %}
        {% if forloop.counter|divisibleby:3 %}</tr><tr>{% endif %}

        <td>{{ job.name }}<br/>{{ job.address }}<br/>{{ job.address_2 }}{% if job.address_2 %}<br/>{% endif %}{{ job.city }}, {{ job.state }} {{ job.zip }}</td>

        {% if forloop.counter < 3 %}
            <td class="spacer" rowspan="0">&nbsp;</td>
        {% endif %}

        {% if forloop.counter == 2 %}
            <td></td>
{#            <td>{{ job.name }}<br/>{{ job.address }}<br/>{{ job.city }}, {{ job.state }} {{ job.zip }}</td>#}
        {% endif %}
    {% endfor %}
</table>

Приблизьте нужный дисплей. Close to right

Проблема При использовании {% if forloop.counter0|divisibleby:3 %}, похоже, не происходит правильного разделения? Я не могу понять, что происходит.

Цикл forloop.counter0 будет считаться с 0, 1, 2, 3, ..... Это означает, что первый цикл уже будет удовлетворять условию, так как 0 делится на 3 (и на любое число), поэтому он уже применит "логику разбиения" для первого цикла. С другой стороны, forloop.counter будет считать с 1, 2, 3, 4, ... так что первая итерация, где он добавит строку, будет третьей.

Вы можете работать с:

<table>
    <tr>
    {% for job in jobsite %}
        <td>{{ job.name }}<br/>{{ job.address }}<br/>{{ job.address_2 }}{% if job.address_2 %}<br/>{% endif %}{{ job.city }}, {{ job.state }} {{ job.zip }}</td>
        {% if forloop.counter|divisibleby:3 and not forloop.last %}
            </tr><tr>
        {% elif not forloop.last %}
            <td class="spacer" rowspan="0">&nbsp;</td>
        {% endif %}
    {% endfor %}
    </tr>
</table>

Я не нашел решения этой конкретной задачи, однако я переделал ее, полагаясь в первую очередь на CSS вместо табличной верстки. Следующий код "решает" эту задачу.

{% for job in jobsite %}
    <div class="address-label">{{ job.name }}<br/>{{ job.address }}<br/>{{ job.address_2 }}{% if job.address_2 %}<br/>{% endif %}{{ job.city }}, {{ job.state }} {{ job.zip }}</div>
{% endfor %}
Вернуться на верх