python in django nutzen

Django, Flask, Bottle, WSGI, CGI…
setiinch
User
Beiträge: 13
Registriert: Samstag 11. Februar 2017, 14:54

Samstag 28. März 2020, 21:45

Hallo,

versuche mich gerade in Django einzuarbeiten und habe folgendes Problem, dass ich Python code nicht direkt nutzen kann.

Code: Alles auswählen

def seite1(request):

    wert3 = {"abc":[1,2,3]}
    wert1 = 1
    wert2 = 5
    wert4 = wert1 + wert2


    return render(request,'seite1.html', wert4)
hatte mit die Funktion in der view.py erstellt und wollte mir das Ergebnis wert4 auf der seite1.html ausgeben lassen.
Hat jem eine Idee wie man das Umsetzen kann ?

mfg
Sirius3
User
Beiträge: 11954
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 28. März 2020, 21:50

Hast Du das entsprechende Kapitel über Templates in der Django-Dokumentation gelesen?
setiinch
User
Beiträge: 13
Registriert: Samstag 11. Februar 2017, 14:54

Samstag 28. März 2020, 22:19

Ich nehme an das bedeutet sowas funktioniert nicht in Django ? Ka welches Kapital genau meinst du?
Benutzeravatar
__blackjack__
User
Beiträge: 5975
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Samstag 28. März 2020, 22:27

@setiinch: Was heisst denn das kannst Du nicht nutzen? Was passiert denn? Und was hättest Du erwartet das da passiert? Was erwartet `render()` als drittes Argument?
long long ago; /* in a galaxy far far away */
setiinch
User
Beiträge: 13
Registriert: Samstag 11. Februar 2017, 14:54

Samstag 28. März 2020, 22:42

hallo,

also ich hättte vermutet das der wert4 als ergebnis auf der seite1.html ausgeben wird in dem ich {{wert4}} in den html einbinden. Das Problem ist aber schon ,dass er den Wert1 = 1 nicht als Variable deklariert und mir ein Fehler wirft. Was aber funktioniert ist das er Listen als Objekte erkennt und ausgibt. :?: . Fazit: Python Variablen kann man nicht definieren aber Listen. Also wie kann man Werte berechnen lassen im backend oder muss man javascript dafür verwenden ?
Sirius3
User
Beiträge: 11954
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 28. März 2020, 23:08

Wenn da ein Fehler kommt, wie sieht er exakt aus, inklusive vollständigem Traceback?
Praktisch wäre dann auch noch zu wissen, wie das Template aussieht.
Die Dokumentation zu render: https://docs.djangoproject.com/en/3.0/t ... shortcuts/
Und in Kapitel 3 wird das alles erklärt: https://docs.djangoproject.com/en/3.0/intro/tutorial03/
setiinch
User
Beiträge: 13
Registriert: Samstag 11. Februar 2017, 14:54

Sonntag 29. März 2020, 11:28

Hallo,

also der Fehler wäre :

TypeError at /seite1/

context must be a dict rather than int.

was für mich bedeutet, dass keine int Variablen zugelassen werden, sondern das er nur dict Objekte zulässt. Was mich verwundert das Python Code sehr start im Django Framework eingeschränkt ist oder liege ich da falsch ?
Sirius3
User
Beiträge: 11954
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 29. März 2020, 11:32

Hast Du das Tutorial gelesen. Dann sollte Dir eigentlich klar sein, warum da ein Wörterbuch erwartet wird. Wie soll den das Template wissen, das irgendwo anders eine Variable wert4 heißt, wo es duch nur ein Int mit dem Wert 6 sieht?
Benutzeravatar
kbr
User
Beiträge: 1141
Registriert: Mittwoch 15. Oktober 2008, 09:27

Sonntag 29. März 2020, 12:25

setiinch hat geschrieben:
Sonntag 29. März 2020, 11:28
Was mich verwundert das Python Code sehr start im Django Framework eingeschränkt ist oder liege ich da falsch ?
Ja, da liegst Du völlig falsch. Django legt Dir keine Restriktionen auf, ist aber ein Tool, das korrekt genutzt werden muss (so wie alle anderen Tools auch).

Natürlich kann man versuchen, sich Django, statt mit Lesen der Dokumentation, mit Ausprobieren zu nähern. Das wird dann aber recht schnell sehr frustrierend.

Sowohl in der Doku als auch in der Fehlermeldung steht, dass als dritter Parameter für render ein Dictionary erwartet wird. Das ergibt auch Sinn, denn schließlich soll die Möglichkeit bestehen, Templates mit vielen und komplexen Daten zu befüllen.

In Jahren gewachsene Lösungen ziehen sich durch das ganze Framework durch. Der beste Einstieg ist das Tutorial, dann kleine eigene Projekte um die Dokumentation zu erforschen, sowie die Basics aus eigener Kraft verstehen zu lernen. Die Einarbeitung in ein Framework kostet immer Zeit – und das ist bei Django nicht anders.
setiinch
User
Beiträge: 13
Registriert: Samstag 11. Februar 2017, 14:54

Sonntag 29. März 2020, 15:33

Hallo,

ich wollte nur Wissen wie man "Basic" Python Code ins Django Framework intigieren kann! Vllt hatte jem mal das selbe Problem. Das mit den 2 Werten summieren war ja nur ein Beispiel. Ich hatte ein Ansatz gepostet der nicht funktioniert, daher wollte ich nur wissen ob es jem auch schon versucht hat und mir helfen kann. In den Tutorials hab ich nix dazugefunden dewegen hab ich die Frage hier gepostet.
Sirius3
User
Beiträge: 11954
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 29. März 2020, 15:45

Im Tutorial gibt es genug funktionierende Beispiele. Der Unterschied zwischen den Beispielen und dem, was Du hier machst, wurde Dir jetzt nun schon mehrfach gesagt: Der dritte Parameter muß ein Wörterbuch sein, damit das Template auch weiß, welchem Wert welcher Name zuzuordnen ist.
Benutzeravatar
__blackjack__
User
Beiträge: 5975
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Sonntag 29. März 2020, 15:47

@setiinch: Die Formulierung „Python Code ins Django Framework intigrieren [sic]“ ist sehr komisch. Das ist ja selbst in Python geschrieben und man integriert da keinen Code sondern schreibt halt Code der das Rahmenwerk *benutzt*. Und das tut man in dem man die angebotene API so benutzt wie das in der Dokumentation steht. Und da steht laut und deutlich, dass das dritte Argument ein Wörterbuch sein muss. Wahrscheinlich geht auch jedes andere Objekt das wie ein Wörterbuch Schlüssel auf Werte abbildet, aber eben keine ganze Zahl. Wie würdest Du die denn auch im Template dann ansprechen wollen? Welchen Namen würdest Du dafür denn als Platzhalter ins Template schreiben wollen?
long long ago; /* in a galaxy far far away */
setiinch
User
Beiträge: 13
Registriert: Samstag 11. Februar 2017, 14:54

Sonntag 29. März 2020, 20:19

So hab es für mich jetzt so gelöst:

Code: Alles auswählen

def seite1(request):
    wert4 = 34
    wert5 = 101
    sum = wert4 + wert5
    wert3 = {"abc":[sum]}

    return render(request,'seite1.html', wert3)
auf Seite1.html dann einfach

Code: Alles auswählen

{{abc}}
hinzufügen fertig

Danke für die Hilfe.
Benutzeravatar
noisefloor
User
Beiträge: 2899
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Sonntag 29. März 2020, 20:44

Hallo,
So hab es für mich jetzt so gelöst:
Das ist nicht nur "für dich", so muss man das machen. Wie oben schon mehrfach gesagt wurde: als 3. Argument erwartet Django ein Dict, in dem die Schlüssel-Werte Paare für das Template drin stehen. Das wird immer erwartet. Auch, wenn du nur einen Wert übergibst.

Die Zeile 3+4 kannst du auch zusammen ziehen:

Code: Alles auswählen

>>> a=1
>>> b=2
>>> c={'foo': a+b}
>>> c
{'foo': 3}
>>> 
`sum` ist als Variablename schlecht, weil du damit die Build-in Funktion `sum` überschreibst, was zu ungewollten Nebeneffekten führen kann.

Gruß, noisefloor
setiinch
User
Beiträge: 13
Registriert: Samstag 11. Februar 2017, 14:54

Sonntag 29. März 2020, 21:13

@noisefloor Wie man ein Dict Objekt erstellt weiß ich auch. Es ging darum wie man Werte von Variablen in Django ausgibt und dazu hab ich in der Doku nix dazu gefunden.
Antworten