Почему это работает, когда я использую целочисленный индекс, но не использую переменную 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 %}