Ich baue eine Python-Funktion, die ein Array zurückgibt, das in einem Auswahl-Dropdown-Feld verwendet werden soll. Ich habe bisher zwei Versionen ausprobiert.Kategorien rekursiv durchlaufen
Beide funktionieren, wobei die erste ein korrekt formatiertes Auswahlfeld zurückgibt. Die erste Lösung geht jedoch nur zwei Ebenen tief. Ich beabsichtige, den Kategorien mehr Tiefe zu geben.
Mein zweites Beispiel ist mein Versuch, dies rekursiv zu tun, um mehr Ebenen zu unterstützen. Es funktioniert, aber ich frage mich, wie ich es optimieren und Bindestriche ähnlich dem ersten Beispiel hinzufügen kann.
# first example two levels deep, formatted properly with dashes
def build_choice_tree():
categories = Category.query.get(1).children
items = [(1, 'None')]
for root in categories:
items.append((root.id, root.name))
if root.children:
for subcat1 in root.children:
items.append((subcat1.id, '- ' + subcat1.name))
if subcat1.children:
for subcat2 in subcat1.children:
items.append((subcat2.id, '--' + subcat2.name))
return items
# second example goes multiple levels, needs dashes
def build_choice_tree2():
categories = Category.query.get(1).children
items = []
def loop(categories):
for category in categories:
items.append((category.id, category.name))
if category.children:
loop(category.children)
return items
result = loop(categories)
return result
Benötigen Sie einige Leerzeichen nach der ID? Oder deine Bedeutung ist, dass jede Ebene die gleiche Länge hat? –
Ich brauche einen Platz zwischen dem Strich und dem Namen – Casey