Zugriff auf "unbekannte" Attribute in jinja2

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Was würdest du in Python tun? `person.categories[kat]`
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

__getattr__ wirft keinen AttributeError?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

@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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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:
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

das ist eine bessere erklärung.
Antworten