Как выполнить итерацию 3 вложенных списков в шаблоне django
У меня есть 3 списка в моих представлениях, и я хочу итерировать их с помощью django шаблон с вложенностью. Например: здесь у меня есть 3 списка card_postings, arrays и post_content
card_postings = ['Indicatif', 'Subjonctif', 'Conditionnel',
'Participe', 'Impératif', 'Infinitif']
arrays = [['Présent', 'Imparfait', 'Futur', 'Passé simple', 'Passé
composé', 'Plus-que-parfait', 'Passé antérieur', 'Futur antérieur'],
['Présent', 'Imparfait', 'Plus-que-parfait', 'Passé'], ['Présent',
'Passé première forme', 'Passé deuxième forme'], ['Présent', 'Passé
composé', 'Passé'], ['Présent', 'Passé'], ['Présent', 'Passé']]
post_content = [["j'ai", 'tu as', 'il/elle a', 'nous avons', 'vous
avez', 'ils/elles ont'], ["j'avais", 'tu avais', 'il/elle avait', 'nous
avions', 'vous aviez', 'ils/elles avaient'], ["j'aurai", 'tu auras',
'il/elle aura', 'nous aurons', 'vous aurez', 'ils/elles auront'],
["j'eus", 'tu eus', 'il/elle eut', 'nous eûmes', 'vous eûtes',
'ils/elles eurent'], ["j'ai eu", 'tu as eu', 'il/elle a eu', 'nous
avons eu', 'vous avez eu', 'ils/elles ont eu'], ["j'avais eu", 'tu
avais eu', 'il/elle avait eu', 'nous avions eu', 'vous aviez eu',
'ils/elles avaient eu'], ["j'eus eu", 'tu eus eu', 'il/elle eut eu',
'nous eûmes eu', 'vous eûtes eu', 'ils/elles eurent eu'], ["j'aurai
eu", 'tu auras eu', 'il/elle aura eu', 'nous aurons eu', 'vous aurez
eu', 'ils/elles auront eu'], ["que j'aie", 'que tu aies', "qu'il/elle
ait", 'que nous ayons', 'que vous ayez', "qu'ils/elles aient"], ["que
j'eusse", 'que tu eusses', "qu'il/elle eût", 'que nous eussions', 'que
vous eussiez', "qu'ils/elles eussent"], ["que j'eusse eu", 'que tu
eusses eu', "qu'il/elle eût eu", 'que nous eussions eu', 'que vous
eussiez eu', "qu'ils/elles eussent eu"], ["que j'aie eu", 'que tu aies
eu', "qu'il/elle ait eu", 'que nous ayons eu', 'que vous ayez eu',
"qu'ils/elles aient eu"], ["j'aurais", 'tu aurais', 'il/elle aurait',
'nous aurions', 'vous auriez', 'ils/elles auraient'], ["j'aurais eu",
'tu aurais eu', 'il/elle aurait eu', 'nous aurions eu', 'vous auriez
eu', 'ils/elles auraient eu'], ["j'eusse eu", 'tu eusses eu', 'il/elle
eût eu', 'nous eussions eu', 'vous eussiez eu', 'ils/elles eussent
eu'], ['ayant'], ['ayant eu'], ['masc.sg.: eu', 'masc.pl.: eus',
'fém.sg.: eue', 'fém.pl.: eues'], ['aie', 'ayons', 'ayez'], ['aie eu',
'ayons eu', 'ayez eu'], ['avoir'], ['avoir eu']]
Здесь каждая 'card_postings' имеет связанные 'arrays', а каждый 'arrays' ассоциированный 'post_content'.
изображение страницы структура страницы то, что я хочу
А также я попробовал это с zip-списком
zipped_lists = zip(card_postings, arrays, post_content)
В моем шаблоне это выглядит следующим образом
{% for card,posts,contents in zipped_lists %}
<div class="card">
<div class="card-body">
<h4 class="text-center">{{ card }}</h4>
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3">
{% for post in posts %}
<div class="col">
<div class="card">
<div class="card-header text-center text-primary">
<h5>{{ post }}</h5>
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item border-0">
{% for subj in contents %}
<i>{{subj}} <br> </i>
{% endfor %}
</li>
</ul>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
{% endfor %}
</div>
Есть ли лучший способ сделать эту вещь, пожалуйста, дайте мне знать Мне нравятся ваши предложения, а также. Есть похожие вопросы, такие как здесь, здесь, здесь, здесь, но ни один из них не помогает моему вопросу. И также если вам нужна дополнительная информация, пожалуйста, дайте мне знать
Для ответа на этот вопрос рассмотрим следующий пример. У меня есть тема под названием "Свежие новости", "Последние новости", которая имеет подтемы под названием "Из Индии", "Из США" и так далее. В каждой подтеме есть множество статей. Древовидная структура для вышеупомянутого выглядит следующим образом
Times_of_India = {
Breaking News :
{
"From India": [article1, article2, article3],
"From USA": [article1, article2, article3],
"From China": [article1, article2, article3]
}
Latest News:
{
"From India": [article1, article2, article3],
"From USA": [article1, article2, article3],
"From China": [article1, article2, article3]
}
}
}
Допустим, я хочу отображать свежие новости в левой части страницы и последние новости в правой части страницы, а под обоими разделами новостей просто отображать новости. Для этого подход будет следующим
for key, value in Times_of_India.items()
<card>key</card>
if isinstance(value, dict):
for k, v in value.items():
<posts>k</posts>
if isinstance(v, list):
for d in v:
<li>d</li>
Пояснение: Breaking_news - это ваши карточки, Location - ваши массивы, а articles list - содержимое вашего поста. Приведенный выше код не проверяет наличие какой-либо ассоциации, просто отображает все, что есть. У вас может быть условие проверки.
Примечание: Я удалил концепцию трех списков и сделал словари, которые имеют ключ и значение, и я могу использовать ключи как мои ассоциации.
Надеюсь, это поможет, если нет, не стесняйтесь спрашивать.
Я написал код на python с теми же списками примеров, и он выдает следующий результат, как вы ожидаете, без использования isinstance. Взгляните Та же логика может быть легко реализована и в шаблоне django.
card_postings = ['Indicatif', 'Subjonctif', 'Conditionnel',
'Participe', 'Impératif', 'Infinitif']
arrays = [
['Présent', 'Imparfait', 'Futur', 'Passé simple', 'Passé composé', 'Plus-que-parfait', 'Passé antérieur', 'Futur antérieur'],
['Présent', 'Imparfait', 'Plus-que-parfait', 'Passé'],
['Présent','Passé première forme', 'Passé deuxième forme'],
['Présent', 'Passécomposé', 'Passé'],
['Présent', 'Passé'],
['Présent', 'Passé']
]
post_content = [
["j'ai", 'tu as', 'il/elle a', 'nous avons', 'vousavez', 'ils/elles ont'],
["j'avais", 'tu avais', 'il/elle avait', 'nousavions', 'vous aviez', 'ils/elles avaient'],
["j'aurai", 'tu auras','il/elle aura', 'nous aurons', 'vous aurez', 'ils/elles auront'],
["j'eus", 'tu eus', 'il/elle eut', 'nous eûmes', 'vous eûtes','ils/elles eurent'],
["j'ai eu", 'tu as eu', 'il/elle a eu', 'nousavons eu', 'vous avez eu', 'ils/elles ont eu'],
["j'avais eu", 'tuavais eu', 'il/elle avait eu', 'nous avions eu', 'vous aviez eu','ils/elles avaient eu'],
["j'eus eu", 'tu eus eu', 'il/elle eut eu','nous eûmes eu', 'vous eûtes eu', 'ils/elles eurent eu'],
["j'auraieu", 'tu auras eu', 'il/elle aura eu', 'nous aurons eu', 'vous aurezeu', 'ils/elles auront eu'],
["que j'aie", 'que tu aies', "qu'il/elleait", 'que nous ayons', 'que vous ayez', "qu'ils/elles aient"],
["quej'eusse", 'que tu eusses', "qu'il/elle eût", 'que nous eussions', 'quevous eussiez', "qu'ils/elles eussent"],
["que j'eusse eu", 'que tueusses eu', "qu'il/elle eût eu", 'que nous eussions eu', 'que vouseussiez eu', "qu'ils/elles eussent eu"],
["que j'aie eu", 'que tu aieseu', "qu'il/elle ait eu", 'que nous ayons eu', 'que vous ayez eu',"qu'ils/elles aient eu"],
["j'aurais", 'tu aurais', 'il/elle aurait','nous aurions', 'vous auriez', 'ils/elles auraient'],
["j'aurais eu",'tu aurais eu', 'il/elle aurait eu', 'nous aurions eu', 'vous auriezeu', 'ils/elles auraient eu'],
["j'eusse eu", 'tu eusses eu', 'il/elleeût eu', 'nous eussions eu', 'vous eussiez eu', 'ils/elles eussenteu'],
['ayant'],
['ayant eu'],
['masc.sg.: eu', 'masc.pl.: eus','fém.sg.: eue', 'fém.pl.: eues'],
['aie', 'ayons', 'ayez'],
['aie eu','ayons eu', 'ayez eu'],
['avoir'],
['avoir eu']
]
for index, card in enumerate(card_postings):
print(card)
for i, array in enumerate(arrays[index]):
print("\t", array)
print("\t\t", post_content[i])
del post_content[0:len(arrays[index])]
Вывод выглядит следующим образом:
Indicatif
Présent
["j'ai", 'tu as', 'il/elle a', 'nous avons', 'vousavez', 'ils/elles ont']
Imparfait
["j'avais", 'tu avais', 'il/elle avait', 'nousavions', 'vous aviez', 'ils/elles avaient']
Futur
["j'aurai", 'tu auras', 'il/elle aura', 'nous aurons', 'vous aurez', 'ils/elles auront']
Passé simple
["j'eus", 'tu eus', 'il/elle eut', 'nous eûmes', 'vous eûtes', 'ils/elles eurent']
Passé composé
["j'ai eu", 'tu as eu', 'il/elle a eu', 'nousavons eu', 'vous avez eu', 'ils/elles ont eu']
Plus-que-parfait
["j'avais eu", 'tuavais eu', 'il/elle avait eu', 'nous avions eu', 'vous aviez eu', 'ils/elles avaient eu']
Passé antérieur
["j'eus eu", 'tu eus eu', 'il/elle eut eu', 'nous eûmes eu', 'vous eûtes eu', 'ils/elles eurent eu']
Futur antérieur
["j'auraieu", 'tu auras eu', 'il/elle aura eu', 'nous aurons eu', 'vous aurezeu', 'ils/elles auront eu']
Subjonctif
Présent
["que j'aie", 'que tu aies', "qu'il/elleait", 'que nous ayons', 'que vous ayez', "qu'ils/elles aient"]
Imparfait
["quej'eusse", 'que tu eusses', "qu'il/elle eût", 'que nous eussions', 'quevous eussiez', "qu'ils/elles eussent"]
Plus-que-parfait
["que j'eusse eu", 'que tueusses eu', "qu'il/elle eût eu", 'que nous eussions eu', 'que vouseussiez eu', "qu'ils/elles eussent eu"]
Passé
["que j'aie eu", 'que tu aieseu', "qu'il/elle ait eu", 'que nous ayons eu', 'que vous ayez eu', "qu'ils/elles aient eu"]
Conditionnel
Présent
["j'aurais", 'tu aurais', 'il/elle aurait', 'nous aurions', 'vous auriez', 'ils/elles auraient']
Passé première forme
["j'aurais eu", 'tu aurais eu', 'il/elle aurait eu', 'nous aurions eu', 'vous auriezeu', 'ils/elles auraient eu']
Passé deuxième forme
["j'eusse eu", 'tu eusses eu', 'il/elleeût eu', 'nous eussions eu', 'vous eussiez eu', 'ils/elles eussenteu']
Participe
Présent
['ayant']
Passécomposé
['ayant eu']
Passé
['masc.sg.: eu', 'masc.pl.: eus', 'fém.sg.: eue', 'fém.pl.: eues']
Impératif
Présent
['aie', 'ayons', 'ayez']
Passé
['aie eu', 'ayons eu', 'ayez eu']
Infinitif
Présent
['avoir']
Passé
['avoir eu']
Надеюсь, это поможет. Не стесняйтесь спрашивать, если вы не понимаете.