Почему это работает, когда я использую целочисленный индекс, но не использую переменную i itterable внутри цикла в jinja

это дает значения none :

   {%for i in l%}
<tr>

  <td>{{con.hotel.i}}</td>
</tr>
{%endfor%}

пока это работает и дает правильные значения

  {%for i in l%}
<tr>
  <td>{{con.hotel1.0}}</td>
</tr>
{%endfor%}

Потому что тогда он попытается получить доступ к атрибуту .i. Если вы напишете .item, то он сначала попытается получить доступ к .item, затем к ['item'] и, наконец, к [int('item')], так что для .0 это означает, что он попробует .0, что не удастся, ['0'], что тоже не удастся, а затем [int('0')], который будет использовать первый элемент

Для hotel.i, он, таким образом, сначала попробует hotel.i, затем hotel['i'], и, наконец, попытается преобразовать 'i' в int, и все эти попытки будут неудачными.

Попробуйте также [item], так как это запутает в случае .item как атрибут существует.

Для jinja однако, вы можете подписать, так:

{% for i in l %}
  <tr>
    <td>{{ con.hotel[i] }}</td>
  </tr>
{% endfor %}
Вернуться на верх