Sirius3 hat geschrieben: ↑Montag 4. Juli 2022, 14:04
Wie schaffst Du es denn, eine Stringrepräsentation eines Wörterbuchs in svg anzusprechen? Für das Template-System von django brauchst Du doch ein Wörterbuch.
Für meinen Zahlenstrahl definiere ich:
Code: Alles auswählen
grafik = {'name': 'zahlenstrahl', 'anf': anf, 'eint':eint, 'txt0': z+(v-1)*z, 'txt1': z+v*z, 'txt2': z+(v+1)*z, 'txt3': z+z*(v+2), 'txt4': z+z*(v+3), 'text_v': text_v, 'x': int(zahl1+anf)}
return typ, text, "", anm, lsg, hilfe, erg, grafik
... das rufe ich, wie oben schon beschrieben in der Fuunktion "main" auf und speichere es in einem Charfield in meinem model "protokoll:
Code: Alles auswählen
typ, text, pro_text, anm, lsg, hilfe, result, grafik = aufgaben(kategorie.id, jg = user.jg, stufe = user.stufe, typ_anf = zaehler.typ_anf, typ_end = zaehler.typ_end, optionen = "")
protokoll = Protokoll.objects.create(
user = user, kategorie = kategorie, text = text, pro_text = pro_text, anmerkung = anm, value = result, loesung = lsg, hilfe = hilfe, grafik = grafik
)
übergebe es an mein Template:
Code: Alles auswählen
context = dict(kategorie = kategorie, typ = protokoll.typ, aufgnr = zaehler.aufgnr, text = protokoll.text, anmerkung = protokoll.anmerkung, form = form, zaehler_id = zaehler.id, hilfe = protokoll.hilfe, protokoll_id = protokoll.id, grafik = protokoll.grafik)
return render(req, 'core/aufgabe.html', context)
und in meinem Template funktioniert
Code: Alles auswählen
{% if grafik.name %}
{% include "svg/zahlenstrahl.svg" %}
{% endif %}
einwandfrei und fügt meine Grafik nur ein, wenn ein Name unter "grafik.name" hinterlegt ist und auch z.B.
Code: Alles auswählen
<!--Beschriftung-->
{% if grafik.txt0 == 0 %}
<text x={{grafik.text_v|add:17}} y="95" style="url(#text)">{{grafik.txt0}}</text>
{% else %}
<text x={{grafik.text_v|add:7}} y="95" style="url(#text)">{{grafik.txt0}}</text>
{% endif %}
<text x={{grafik.text_v|add:107}} y="95" style="url(#text)">{{grafik.txt1}}</text>
<text x={{grafik.text_v|add:207}} y="95" style="url(#text)">{{grafik.txt2}}</text>
<text x={{grafik.text_v|add:307}} y="95" style="url(#text)">{{grafik.txt3}}</text>
<text x={{grafik.text_v|add:407}} y="95" style="url(#text)">{{grafik.txt4}}</text>
funktioniert auch wie gewünscht.
Ich könnte mir jetzt aber, nachdem du sagst, das könne so nicht funktionieren, vorstellen, dass
die Werte nicht aus der Datenbank zieht sondern von "typ, text, pro_text, anm, lsg, hilfe, result,
grafik = aufgaben(..." übernimmt, oder von " protokoll = Protokoll.objects.create(... grafik = grafik)
... das würde auch erklären, dass die Grafik bei der ersten Erzeugung angezeigt wird, nicht aber bei einer Falscheingabe. Bei dieser wird die letzte Aufgabe aus dem Protokoll geladen und angezeigt - nicht aber die Grafik! Dann wäre noch ein Geheimnis gelöst!
OK, dann versuche ich mich mal an JSON!