Seite 1 von 1

Zugriff auf "unbekannte" Attribute in jinja2

Verfasst: Montag 14. September 2009, 10:07
von Hyperion
Hallo zusammen,

ich komme einfach bei folgendem Problem nicht weiter:

Ich habe eine Struktur der folgenden Art:

Code: Alles auswählen

data  = [
    {
        "name": "Max Mustermann",
        "categories": {
            "foo": 42,
            "bar": 123
        }
    },
# hier kommen noch weiter Datensätze
    {
    ...
    }
]
Der wichtige Aspekt ist nun, dass ich nicht weiß, welche Attribute sich unterhalb von categories befinden. Ich weiß also nicht, dass es "foo" und "bar" überhaupt gibt als Kategorie; vor allem sind die bei jeder Person unterschiedlich.

Nun will ich diese aber in einem Template ausgeben. Mein Ansatz bisher:

Code: Alles auswählen

<ul>
{% for person in data %}
    <li>
        <p>{{ person.name }}</p>
        <ul>
        {% for kat in person.categories %}
            <li>{{ kat }}: {{ person.categories.kat }}</li>
        {% endfor %}
        </ul>
    </li>
{% endfor %}
</ul>
Leider klappt das nicht, d.h. ich bekomme nur einen leeren String statt der Werte. "cat" hingegen wird mir wunderbar als "foo" und "bar" angezeigt.

Eigentlich kann ich ja per "object.name" Attribute (oder Items) von Objekten erhalten. In diesem Falle scheint aber das "kat" in der inneren for-Schleife nicht wieder als Attribut verwendbar.

Wie kann ich nun diese Problem lösen?

Verfasst: Montag 14. September 2009, 10:27
von DasIch
Was würdest du in Python tun? `person.categories[kat]`

Verfasst: Montag 14. September 2009, 10:31
von Hyperion
Oh mann... es klappt, danke. Nur kapiere ich nicht, wieso der Zugriff über den Punkt-Operator nicht geklappt hat.

In der Doku wird das doch so angegeben:
http://jinja.pocoo.org/2/documentation/ ... #variables

Kann mich da jemand evtl. erleuchten?

Verfasst: Montag 14. September 2009, 11:00
von audax
__getattr__ wirft keinen AttributeError?

Verfasst: Montag 14. September 2009, 11:08
von DasIch
@Hyperion person.categories.kat führt dazu dass versucht wird auf dass Attribut `kat` von person.categories zuzugreifen, dass existiert nicht und weil in dem dict auch kein Item mit dem Key `kat` ist passiert nichts.

Verfasst: Montag 14. September 2009, 11:09
von Hyperion
DasIch hat geschrieben:@Hyperion person.categories.kat führt dazu dass versucht wird auf dass Attribut `kat` von person.categories zuzugreifen, dass existiert nicht und weil in dem dict auch kein Item mit dem Key `kat` ist passiert nichts.
*Patsch* herrje... bin wohl noch halb im Urlaub! :oops:

Verfasst: Montag 14. September 2009, 11:17
von audax
das ist eine bessere erklärung.