Django. "Словарь изменил размер во время итерации", при этом ничего не изменив

Мне кажется, что я схожу с ума. Я пытаюсь выполнить итерацию по словарю, содержащему списки.

Вот мой код: (Да, я знаю, что этого недостаточно для достижения того, что я пытаюсь сделать, но я сократил код до минимума, при этом проблема осталась):

{% for wc in response %}
    <tr>
        <td>{{ response.wc }}</td>
    </tr>
{% endfor %}

Но я получаю эту ошибку "словарь изменил размер во время итерации"

Как может понять любой человек с половиной мозга, я не собираюсь менять НИЧЕГО в дикте списков.

Я думаю о хакерском решении, просто передать другой список ключей в шаблон, который я могу использовать для итерации по списку, например: {%for key in keys%} response.key. Но мне кажется, что это неправильный способ сделать это.

{% for wc in response %}
    <tr>
        <td>{{ response.wc }}</td>
    </tr>
{% endfor %}

Кажется, что это неправильно.

Используйте как показано ниже.

{% for wc in response %}
    <tr>
        <td>{{ wc }}</td>
    </tr>
{% endfor %}

wc - это текущее значение цикла for. Вы должны использовать его. Вы можете получить доступ к атрибутам этого объекта wc, как wc.attribute_name.

Так циклически перебирать переменные нельзя. Вы должны сделать так:

{% for wc in response %}
 {{ wc }}
{% endfor %}

Выполняя {{ response.wc }}, Django попытается сделать три вещи: поиск по response["wc"], вызов response.wc() и поиск по списку response[wc], где wc - индекс. В зависимости от того, какой у вас код, он может изменить объект response.

Вернуться на верх