Wie funktioniert das "rekursive" Tag von Jinja2?

8

Ich versuche in jinja2 ein sehr einfaches Tree-Walking-Template zu schreiben, indem ich einige benutzerdefinierte Objekte mit überladenen Spezialmethoden (getattr, getitem, etc) benutze. Es scheint einfach zu sein, und der entsprechende Python-Walk des Baumes funktioniert gut, aber es gibt etwas über die Art, wie Jinjas Rekursion funktioniert, die ich nicht verstehe. Der Code ist unten gezeigt:

%Vor%

Die Vorlage löst eine Ausnahme aus, als ob die Rekursion nicht stattgefunden hätte. Der innere Aufruf wird gemacht, aber irgendwie bezieht sich der Verweis auf "Kategorie" immer noch auf den Elternteil. Was gibt es hier? Es muss etwas sehr fundamentales fehlen, was die rekursiven Vorlagen angeht. (Oder etwas sehr fundamental Dummes, das ich tue, das ich einfach nicht sehen kann.

    
Ryan 13.10.2009, 22:21
quelle

1 Antwort

7

Wie ich aus Ihrem Code ersehen kann, verstehen Sie rekursiv korrekt, mit einer Ausnahme: Es ersetzt iterable in der for-Anweisung, aktualisiert aber nicht die Variable ( category in Ihrem Code), die ursprünglich darin verwendet wurde. Daher durchläuft die Nested-Schleife die untergeordneten Elemente, aber set -Tag-Nachschlagetasks in der ursprünglichen category , und nicht eine, die an die loop() übergeben wurde.

Ich schlage vor, die __iter__() -Methode zu ändern, um self.items.iteritems() und die Vorlage an:

zurückzugeben %Vor%     
Denis Otkidach 14.10.2009, 08:56
quelle

Tags und Links