Home > OS >  How to iterate 3 nested lists on django template
How to iterate 3 nested lists on django template

Time:10-15

I have 3 lists on my views and I want to iterate it with django template with nestedly. Eg: here I have 3 lists name card_postings,arrays and 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’.

picture of page page structure what I want

And also I tried this with a zip list

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

CodePudding user response:

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. 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.

CodePudding user response:

I have written a python code with the same example lists and it produces the following output as you are expecting without using isinstance. Have a look Same logic can be implemented easily in django template as well.

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.

  • Related