简体   繁体   English

如何在 Django 模板上迭代 3 个嵌套列表

[英]How to iterate 3 nested lists on django template

I have 3 lists on my views and I want to iterate it with django template with nestedly.我的视图中有 3 个列表,我想用 django 模板嵌套地迭代它。 Eg: here I have 3 lists name card_postings,arrays and post_content例如:这里我有 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']]

Here each 'card_postings' has associated 'arrays', and each 'arrays' associated 'post_content'.这里每个“card_postings”都关联了“arrays”,每个“arrays”关联了“post_content”。

picture of page page structure what I want页面结构的图片我想要什么

And also I tried this with a zip list我也用一个 zip 列表试过这个

zipped_lists = zip(card_postings, arrays, post_content) zipped_lists = zip(card_postings, arrays, post_content)

In my template is look like this在我的模板中看起来像这样

 {% 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>

Is there are any better way to do this thing please let me know I like your suggestions as well.there are similar questions such as here,here,here but any of these are not help my question.And also if you need more information please let me know有没有更好的方法来做这件事,请让我知道我也喜欢你的建议。有类似的问题,比如这里,这里,这里,但这些都不能帮助我的问题。如果你需要更多信息,请让我知道

Considering the below example scenario to answer the above.考虑以下示例场景来回答上述问题。 I have a topic called "Breaking News", "Latest News", which has sub topic called "From India", "From USA", and so on.我有一个名为“突发新闻”、“最新消息”的主题,其中包含名为“来自印度”、“来自美国”等的子主题。 Each sub topic has many articles in it.每个子主题中有许多文章。 The tree structure for the above is上面的树结构是

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]
}
}
}

and lets say for an instance I want to display breaking news on left side of the page and latest right of the page and under both news section just display news.并假设例如我想在页面左侧和页面右侧显示突发新闻,并且在两个新闻部分下只显示新闻。 To do this the approach would be as follows为此,方法如下

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>

Explanation: Breaking_news is your cards, Location is you arrays and articles list is your post content.说明:Breaking_news 是你的卡片,Location 是你的数组,而文章列表是你的帖子内容。 The above code does not check for any association just displays whatever is there.上面的代码不检查任何关联,只是显示那里的任何内容。 You can have a condition checks.您可以进行条件检查。

Note: I removed concept of three lists and made dictionaries which has key and value and I can use keys as my associations.注意:我删除了三个列表的概念并制作了具有键和值的字典,我可以使用键作为我的关联。

Hope this helps if not feel free to ask.如果不随意询问,希望这会有所帮助。

I have written a python code with the same example lists and it produces the following output as you are expecting without using isinstance.我已经用相同的示例列表编写了一个 python 代码,它在不使用 isinstance 的情况下产生了您期望的以下输出。 Have a look Same logic can be implemented easily in django template as well.看看同样的逻辑也可以在 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])]

The output is as follows:输出如下:

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']

Hope this helps.希望这可以帮助。 Feel free to ask if you dont understand.如果您不明白,请随时提问。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM