2017-03-10 2 views
1

J'ai une liste imbriquée complexe de modèles qui ressemble à ceci:liste imbriquée Sortie à xlsx en utilisant Django

hierarchy_tree = ['0000', 'hierarchy' [['0000-22', 'hierarchy2', [['0000-33', 'hiearchy3', [['0000-44-4444', 'hiearchy4', [['0000-55-5555-55', 'hiearchy5', []]]]]]]]]] 

Je suis en mesure d'afficher facilement ce dans un modèle en utilisant la notation par points - par exemple:

{% for hierarchy in hierarchy_tree %} 
      <tr class="item" data-id="{{system.0}}" data-parent=""> 
       <td> 
        {{hierarchy.0}} 
       </td> 
       <td> 
        {{hierarchy.1.genericname}} 
       </td> 

Maintenant j'essaye de produire ceci à un dossier .xlsx mais je n'arrive pas à comprendre comment passer tous les niveaux de cette liste? Comment puis-je faire la même chose que dans le template pour faire passer cette liste à Excel?

J'ai essayé ce qui suit qui retournera la 1ère liste mais qui génère une erreur (ValueError à/post/1/export/hierarchy/- ne peut pas être caché (ma liste passée) pour les sous-listes à cause du chemin qu'ils sont imbriqués je crois.

for r in hierarchy_tree: 
    ws.append(r) 

J'ai également essayé et échoué à plusieurs reprises pour accéder aux sous-listes en utilisant d'autres méthodes.

Donc, en bout de ligne, je dois trouver comment accéder et transmettre les valeurs pour les sous-listes - toute idée ou aide sera grandement appréciée?

Merci

Répondre

1

Commentaire: ... est à seulement 1 ligne de la liste ...

Python print une instance de type list dans une ligne, avec surounding [...].
Votre hierarchy_tree est de type liste de n listes.
Chaque paslist à hierarchy_tree commence par [ et se termine par ].


Vous devez casser votre hierarchy_tree en ligne de données. Par exemple:

def treeWalk(tree, level=0): 
    rData = [ '' for i in range(level)] 
    for item in tree: 
     if isinstance(item, list): 
      if len(rData) > level: 
       ws.append(rData) 
       level += 1 

      treeWalk(item, level) 
      return 
     rData.append(item) 

treeWalk(hierarchy_tree) 

Testé avec Python: 3.4.2 - openpyxl: 2.4.1 - LibreOffice: 4.3.3.2

+0

Merci pour votre réponse - cela a été très utile - ont appris un peu – beginAgain

+0

Il y a quelque chose que j'essaye de comprendre cependant - l'exemple que j'ai donné ci-dessus est juste 1 rangée dans la liste "hierarchy_tree = [0000]," hierarchy "[[" 0000-22 "," hierarchy2 ", [[ '0000-33', 'hiearchy3', [['0000-44-4444', 'hiearchy4', [['0000-55-5555-55', 'hiearchy5', []]]]]]]]] ] "- La boucle ignore toutes les lignes supplémentaires - je suis toujours en train de le regarder - vous fera savoir - e Encore une fois pour votre aide – beginAgain

+0

Je l'ai trouvé hier soir - j'aurais dû poster ici. Merci un milliard :) – beginAgain