Seite 1 von 1

URL aufrufen

Verfasst: Samstag 13. Juli 2024, 15:40
von Pitwheazle
Bisher rufe ich die Aufgaben der verschiedenen Kategorien mit

Code: Alles auswählen

href="{% url 'main' kategorie.slug %}"
und dem Pfad

Code: Alles auswählen

path('<slug:slug>/', views.main, name='main'),
auf. Für mein neues Rechenduell will ich die gleichen Routinen benutzen muss aber (manchmal) unterscheiden, ob es um ein Duell geht oder nicht. Meine Funktion "main" nimmt jetzt also einen weiteren Parameter "duell" entgegen

Code: Alles auswählen

def main(req, slug, duell=False):
also muss ich den jetzt beim obigen Aufruf ergänzen - kann das aber nicht:

Code: Alles auswählen

href="{% url 'main' kategorie.slug  "False" %}"
hätte ja klappen können :(

Nachtrag:

Code: Alles auswählen

href="/{{kategorie.slug}}/False/"
klappt schon besser, ergänzt aber vorne die aufrufende Seite "uebersicht":

Code: Alles auswählen

http://localhost:8000/uebersicht/main/addieren/False/
wie bekomme ich die weg?

Re: URL aufrufen

Verfasst: Samstag 13. Juli 2024, 18:47
von Pitwheazle
Besteht das Problem darin, dass ich versucht habe hier mit "False" einen Wahrheitswert einzusetzen und im view auszulesen?
Es scheint zu unktionieren mit:

Code: Alles auswählen

href="{{kategorie.slug}}/0/"
und

Code: Alles auswählen

path('<slug:slug>/<int:duell>/', views.main, name='main'),
... Kann man dieses "0" optional verwenden, also nur eine "1" wenn Duell ansteht und ansonsten bleibt es frei oder so?
... oder ist es sogar möglich, die aufrufende Seite zu übergeben oder auszulesen - ads wäre optimal.

Re: URL aufrufen

Verfasst: Sonntag 14. Juli 2024, 00:57
von noisefloor
Hallo,

mir ist nicht wirklich klar, was du willst...

Sowas? Du hast z.B. https://rechnentrainer.de/potenzen mit Aufgaben zu Potenzen und willst mit https://rechnertrainer.de/potenzen/duell das Duell zu Potenzen starten (und nicht die Aufgaben)?

Gruß, noisefloor

Re: URL aufrufen

Verfasst: Sonntag 14. Juli 2024, 08:59
von Pitwheazle
Ich will in beiden Fällen die Aufgaben zu Potenzen starten. Beim Duell brauche ich aber ein anderes HTML Template in dem auch die beiden Duellanten gezeigt werden. Die Aufgaben und die Routinen sind aber gleich mit Ausnahme der Wertetabellen, die sollen beim Duell nicht auftauchen.
Ich dachte ich löse das mit
if duell zeige die normale Aufgabenseite, else ergänze in der Aufgabenseite die Duellanten
if duell starte nach der Erstellung der Aufgabe die Auslosung der Duellanten
und am Ende:
if duell springe auf die Übersichtseite des Schülers zurück, else zur Duellübersicht
und
if duell zeige keine Wertetabellen

Re: URL aufrufen

Verfasst: Sonntag 14. Juli 2024, 12:25
von Pitwheazle
Zu früh gefreut:
Also das funktioniert, aber leider nur für eine Aufgabe - es werden bei meinem System aber immer 10 Aufgaben am Stück gerechnet, außer wenn ich auf "abbrechen" klicke. So soll es auch beim Rechenduell bleiben. Also, wenn ich eine Aufgabe z.B. "Kopfrechnen" von der Duell_Seite aufrufe, so werde ich, wenn ich ich auf "abbrechen" klicke auch, wie gewünscht, wieder auf die Duell-Übersichtseite zurückgeleitet anstelle auf die Schüler-Übersichtseite. Wunderbar - aber wenn ich die Aufgabe löse und ie zweite Aufgabe aufgerufen wird, hat mein System natürlich vergessen, dass die erste Aufgabe von einem Duell kommt und ich lande, wenn ich abbreche, oder auch nach der 10ten Aufgabe nicht im Duell sondern auf der Schüler-Übersichtseite (in dem Fall auf der der Lehrkraft, da diese ja das Duell aufruft).
Wie kann ich dafür sorgen, dass sich das System merkt, dass es in der Duell Umgebung arbeitet?- ich habe keine Idee. Session (da habe ich mich noch nicht mit beschäftigt)? Cookie? Oder irgendwas, was ich schon beherrsche, wo mir die Idee fehlt?
Was mir einfällt, wäre, dass ich im Profil der Lehrkraft einen "Schalter" einfüge, der beim Aufruf des Duells gesetzt und hinterher wieder zurückgesetzt wird.

Re: URL aufrufen

Verfasst: Sonntag 14. Juli 2024, 15:41
von noisefloor
Hallo,

einfach wäre, wenn du für's Duell einfach einen eigenen View anlegst, wo die Programmlogik auf's Duell ausgelegt ist.

Gruß, noisefloor

Re: URL aufrufen

Verfasst: Sonntag 14. Juli 2024, 16:08
von Pitwheazle
Ich glaube nicht. Der view in dem alles zusammenläuft hat 250 Zeilen und der ruft jeweils den jeweiligen view mit der Kategorie auf - das sind zurzeit 28 und auch das Abbrechen, Lösung anzeigen usw. sind eigene views. Und im Endeffekt geht es ja nur darum, dass nach den 10 Aufgaben ein anderes HTML Template aufgerufen wird und die Wertetabellen in den Zuordnungen, bei Termen und Funktionen (bisher) übersprungen werden. Das müsste einfacher gehen. Ich probiere das jetzmal aus, dass die Lehrkraft in den "Duellmodus" geschaltet wird.

Re: URL aufrufen

Verfasst: Sonntag 14. Juli 2024, 19:51
von noisefloor
Hallo,

wie du willst bzw. meinst. Nur: wenn du einen eigenen View anlegst und der am Ende das macht, was du willst, kann man _dann_ nochmal schauen, ob man das nicht mit einem anderen View, der vielleicht ähnlich ist, zusammenlegen kann. Das nennt sich "refactoring" und ist bei größeren Projekten ziemlich normal - egal wie gut man Programmieren kann.

250 Codezeilen in einem View erscheint ein bisschen exzessiv. Da kann man ziemlich sicher Teile in Funktionen auslagern. Ein View an sich dürfte nie so viele Zeilen benötigen.

Gruß, noisefloor

Re: URL aufrufen

Verfasst: Montag 15. Juli 2024, 12:42
von Pitwheazle
Ich habe zwar das, was ich zunächst erreichen wollte, mit 10 Codezeilen hinbekommen, warscheinlich hast du aber recht und ich muss einen eigenen view erstellen.
Zunächst mal: Worin besteht der Nachteil eines umfangreichen views und was ist der Vorteil der Auslagerung. ich hab eigentich alles, was zwei- oder mehrmals genutzt wird in eigene Funktionen ausgelagert. Aber auch die views für die einzelnen Aufgabenkategorien sind manchmal recht lang. Fast alle Kategorien haben Unterkategorien, dadurch werden auch hier die views recht lang. Ich könnte natürlich diese Unterkategorien auch alle auslagern, dadurch würde mein Code aber sicher nicht übersichtlicher.
Ich vermute aber, dass ich mit meinem Rechenduell an neue Grenzen stoße und könnte mir vorstellen, dass ich mich jetzt auch noch mit JavaScrip beschäftigen muss und Routinen auf dem Client ausführen muss. Es wäre schön, wenn mir da jemand eine Einschätzung dazu geben könnte.
Ich versuche mal die einzelnen Schritte meines Duells grob aufzuzeigen:

Code: Alles auswählen

Eine Aufgabenkategorie für das Duell wird aufgerufen (insgesamt werden 10 Aufgaben nacheinander angezeigt):
while keine 10 Aufgaben und kein Abbruch:
  erzeuge Aufgabe 
  lose zwei Duellanten aus
  while keine Eingabe und y Sekunden:
     zeige die Aufgabe an
     zeige Sekunden und erneuere jede Sekunde die Anzeige
     while x Sekunden
        zeige x * in den Namefeldern an
     (nach x Sekunden:)
     zeige die beiden Namen an
   (nach y Sekunden:) 
   die Ausgelosten bekommen Punktabzug weil sie keine Antwort hatten
   lose neue Duellanten aus und zeige die Namen an
wenn Eingabe erfolgt: überprüfe die Eingabe
if richtig:
   Punktevergabe
   neue Aufgabe
   neue Duellanten
else:
  Punktvergabe
  alte Aufgabe bleibt bestehn (maximal 3 Versuche)
Nach 10 Aufgaben oder Abbruch 
  zurück zur Übersicht, Anzeige des Punktestandes
Die Zeit y legt fest, wann automatisch neue Duellanten ausgelost wurden, da die ersten beiden keine Antwort wussen
Die Zeit x legt fest, wie lange Sternchen im Namenfeld gezeigt werden, bevor die Namen angezeigt werden. Damit sollen alle im Raum schon mal rechnen. Und hier vermute ich, komme ich mit meinem Code nicht mehr sinnvoll weiter. Ich müsste nach jeder Sekunde bis zur Veröffentlichung der Namen mein template erneueren ich vermute, das kann man auch auf dem Client erledigen lassen.
Habt ihr da Tipps, wie ich da rangehe?

Re: URL aufrufen

Verfasst: Montag 15. Juli 2024, 15:19
von grubenfox
Pitwheazle hat geschrieben: Montag 15. Juli 2024, 12:42 Zunächst mal: Worin besteht der Nachteil eines umfangreichen views und was ist der Vorteil der Auslagerung.
Ich versuche mich mal (aber mehr als ein paar Allgemeinplätze kommen dabei wohl nicht raus):
Nachteil: viel Code bzw. HTLM-Text mit viel Platz für versteckte Fehler
Auslagerung: möglicherweise hoffentlich viele kleine Routinen mit wenig Code/Text und wenig Platz für Fehler die man unabhängig testen kann...