Seite 1 von 1

wie zeige ich eine Liste mit Dictionaries in einem Template?

Verfasst: Samstag 22. Februar 2025, 19:20
von Pitwheazle
Ich möchte ein Bißchen Statistik in meinem Rechentrainer machen.
Zunächst eine Liste, wieviele Aufgaben in den jeweiligen Kategorien erledigt wurden und dann auch noch ein Ranking der fleißigsten Schülerinnen und Schüler und Lerngruppen.
Dazu erstelle ich jeweils eine Liste mit Dictionaries, das habe ich sogar alleine hinbekommen. Ich schaffe es aber noch nicht, diese ordentlich in einem Template zu integrieren.
Am einfachsten scheint die Liste mit den Kategorien:

Code: Alles auswählen

    kategorien = Kategorie.objects.all().order_by('zeile')
    kategorienliste = []
    for kategorie in kategorien:
        protokoll = Protokoll.objects.filter(kategorie = kategorie)
        anzahl = {"kategorie": kategorie, "anzahl": protokoll.count()}
        kategorienliste.append(anzahl)
    print(kategorienliste[:3])
erzeugt:

Code: Alles auswählen

[{'kategorie': <Kategorie: addieren>, 'anzahl': 41490}, {'kategorie': <Kategorie: subtrahieren>, 'anzahl': 25376}, {'kategorie': <Kategorie: verdoppeln>, 'anzahl': 28519}]
In meinem Template bin ich so weit:

Code: Alles auswählen

{% for kategorie in kategorien %}
    <tr>
    {% for wert in kategorie.values %}
        <td>
            {{wert}}
        </td>
        {% endfor %}
    <tr>
{% endfor %}
aber beim Eintrag {{wert}} ist es mir noch nicht gelungen, die beiden Einträge zu trennen. "kategorie" zeigt den "slug" Wert und ich hätte gerne den Namen, den ich unter "kategorie.name" gespeichert habe.

Und bei der Bestenliste habe ich noch mehr Einträge in jedem Dictionary. Pro Schülerinnen/Schüler ist dies gespeichert:

Code: Alles auswählen

schuelerliste = {"profil": s.id, "hjsumme": hjsumme, "sjsumme": sjsumme, "summe": summe}
(ich hoffe, ihr schimpft nicht wieder über mein sj und hj - ich habe hier doch wieder Schuljahr und Halbjahr abgekürzt :))

Re: wie zeige ich eine Liste mit Dictionaries in einem Template?

Verfasst: Sonntag 23. Februar 2025, 09:03
von noisefloor
Hallo,

das hat so ziemlich nichts mit Django Templates zu tun, sondern mit dem Grundverständnis von Python, Datenstrukturen und Zugriff darauf... Du hast eine Liste, darüber kannst du iterieren. Jedes Element der Liste ist ein Dict, darauf kannst du über die Schlüssel zugreifen oder über das Dict iterieren oder was auch immer Dicts noch so drauf haben.

Im Kontext von Django:

Code: Alles auswählen

>>> from django.template import Template, Context
>>> data = [{'kategorie': 'Mathe', 'aufgaben': 1234}, {'kategorie': 'Physik', 'aufgaben': 5678}]
>>> template = Template('''
... {% for item in data %}
... <p>{{ item.kategorie}} : {{ item.aufgaben }}</p>
... {% endfor %}''')
>>> context = Context({'data':data})
>>> template.render(context)
'\n\n<p>Mathe : 1234</p>\n\n<p>Physik : 5678</p>\n'
>>>
Gruß, noisefloor

Re: wie zeige ich eine Liste mit Dictionaries in einem Template?

Verfasst: Sonntag 23. Februar 2025, 12:32
von Pitwheazle
Die Unterschiede zwischen Listen und Dicts hatte ich zwischenzeitlich begriffen und auch die Zugriffe darauf. Irgendwo hatte ich aber wieder einen Denkfehler oder mich vertippt. Jetzt geht es, Danke.