mam AF Lista tej struktury przekazany do szablonu z nazwą bars
w Pythonie 3.4:Jinja pętla na zagnieżdżone listy tworzy pusty wyjście
[{'var': 1.18, 'occurrences': [0.0805, 0.0808, 0.0991, 0.0994, 0.2356], 'name': 'item name'},
{'var': 2.31, 'occurrences': [1.0859, 1.1121, 1.4826, 1.4829, 1.8126, 1.8791], 'name': 'other name'}]
chcę tworzyć następujące dane wyjściowe dla każdego słownika:
% List with names
item 1: item name
item 2: other name
% List with vars
item 1: 1.18
item 2: 2.31
% List with occurences
item 1: 0.0805, 0.0808, 0.0991, 0.0994, 0.2356
item 2: 1.0859, 1.1121, 1.4826, 1.4829, 1.8126, 1.8791
Pierwsze dwa nie stanowią problemu, ale nie mogę go włączyć do zapętlenia listy wystąpień. Używam następujący jinja szablonu:
{% for item in bars %}
item {{ loop.index }}: {{ item.name }}
{% endfor %}
{% for item in bars %}
item {{ loop.index }}: {{ item.var }}
{% endfor %}
{% for item in bars recursive %}
{% if item.occurrences %}
Item {{ loop.index}}: {{ loop(item.occurrences) }}
{% else %}
No content
{% endif %}
{% endfor %}
To daje ten dziwny wyjście w trzecim przypadku:
Item 1: No content
No content
No content
No content
No content
Item 2: No content
No content
No content
No content
No content
No content
To jest dziwne, ponieważ wydaje się, że pętle każdy element listy z wystąpień, ale nie zdaje testu treści. Co ja robię źle?
Edytuj: Wszystkie trzy odpowiedzi wskazywały na mnie we właściwym kierunku, ale @famousgarkin daje najbardziej wyszukaną i elastyczną odpowiedź. Skończyło się następujące rozwiązanie:
{% for item in bars %}
Item {{ loop.index }}: {% for occurrence in item.occurrences %} subitem {{ loop.index }}: {{ occurrence }} {% endfor %}
{% endfor %}
To pozwala mi ująć każdy element w osobnym kontekście, który jest to, co chcę. Ale ponieważ cel ten nie był jasny od samego początku, chciałbym móc przegłosować wszystkie twoje odpowiedzi. Przepraszamy, ale dziękuję wszystkim za szybką pomoc!
Ale co mam zrobić, aby zapętlić listę i wydrukować każdy element zamiast drukowania całej listy? Nawiasem mówiąc, źle zrozumiałem instrukcję if, zamierzając sprawić, by sprawdzono, czy wystąpienia były prawdziwe, ale teraz widzę, że to było złe. Nie potrzebuję tego. @vikki – Stenskjaer
@Stenskjaer, ponieważ 'occurrences' jest listą, możesz po prostu powtórzyć ją ponownie, zobacz moją edycję. – vikki