Seite 1 von 1

Django: Refresh Problem | Website für einen Sprachtest

Verfasst: Donnerstag 12. Juli 2018, 13:45
von Schwarzer Wolf
Ich Grüße Euch

Ich bin dabei eine kleine Django APP zu schreiben, die ein wenig auf einen schriftlichen Teil einer Sprachprüfung vorbereitet. Aber seit Tagen komme ich nicht mehr weiter, trotz einiger Recherche. Das Problem ist Folgendes:

Wie kriege ich das hin, dass nur einmal bei beginn (bei Neustart der Übung) ein zufälliger Text erzeugt wird, und ansonsten nur der bereits geladene Text?

Habe es schon erfolglos mit verschiedenen if | else Techniken probiert und auch mit anderen Seiten, auf die ich verlinkt habe. Am besten wäre es, wenn die Auswertung auf der gleichen Seite wie der Test zu sehen wäre ['telc/read_comp1.html'].

Hier der relevante Teil der view.py:

Code: Alles auswählen

def read_comp1(request):
    exercise_list = ReadComp1.objects.filter(status='activated')
    exercise = random.choice(exercise_list)
    exercise.text, selection_set, solution = _read_comp1_mod(exercise.text)

    if request.method == 'GET':
        form = ReadComp1Form()
    else:
        form = ReadComp1Form(request.POST)
        if form.is_valid():
            a = form.cleaned_data['a']
            b = form.cleaned_data['b']
            c = form.cleaned_data['c']
            d = form.cleaned_data['d']
            e = form.cleaned_data['e']
            f = form.cleaned_data['f']

            answers = [a, b, c, d, e, f]

            context = {
                'exercise': exercise,
                'selection_set': selection_set,
                'form': form,
                'answers': answers
            }

            return render(request, 'telc/read_comp1.html', context)

    context = {
        'exercise': exercise,
        'selection_set': selection_set,
        'form':form
    }

    return render(request, 'telc/read_comp1.html', context)
Der Code an sich ist noch recht alphamäßig, da ich erst eine funktionierende Version haben wollte, bevor ich mich ans Optimieren mache.

Re: Django: Refresh Problem | Website für einen Sprachtest

Verfasst: Donnerstag 12. Juli 2018, 13:51
von __blackjack__
Du musst Dir die Übung irgendwie über die Aufrufe hinweg merken. Über einen Parameter in der URL, oder über ein Cookie, oder in der Datenbank, beispielsweise.

Re: Django: Refresh Problem | Website für einen Sprachtest

Verfasst: Donnerstag 12. Juli 2018, 14:29
von Schwarzer Wolf
__blackjack__ hat geschrieben: Donnerstag 12. Juli 2018, 13:51 Du musst Dir die Übung irgendwie über die Aufrufe hinweg merken. Über einen Parameter in der URL, oder über ein Cookie, oder in der Datenbank, beispielsweise.
Danke für die schnelle Antwort. Jetzt hab ich zumindest schon mal bessere Lösungsansätze.

Mit Parameter in der URL meinst Du GET? Ist das erste Mal, dass ich Forms benutze, und bisher blicke ich nicht so richtig durch. Der Gedanke mit Datenbank kam mir auch schon. Das müsste ich dann manuell machen in einer extra Tabelle, oder bietet Django eine Möglichkeit?

Welchen der 3 Wege würdest Du denn Empfehlen bzw. welches ist der leichteste? Die App soll vermutlich nur lokal laufen, also nichts 'Großes'.

Re: Django: Refresh Problem | Website für einen Sprachtest

Verfasst: Donnerstag 12. Juli 2018, 14:34
von Sirius3
Django kennt Sessions, in denen man solche Informationen ganz einfach speichern kann.

Du solltest versuchen, doppelten Code zu vermeiden:

Code: Alles auswählen

def read_comp1(request):
    exercise_list = ReadComp1.objects.filter(status='activated')
    exercise = random.choice(exercise_list)
    exercise.text, selection_set, solution = _read_comp1_mod(exercise.text)

    context = {
        'exercise': exercise,
        'selection_set': selection_set,
        'form':form
    }

    if request.method == 'GET':
        form = ReadComp1Form()
    else:
        form = ReadComp1Form(request.POST)
        if form.is_valid():
            context['answers'] = [
                form.cleaned_data[k] for k in ('a', 'b', 'c', 'd', 'e', 'f')
            ]
    return render(request, 'telc/read_comp1.html', context)

Re: Django: Refresh Problem | Website für einen Sprachtest

Verfasst: Samstag 21. Juli 2018, 13:59
von Schwarzer Wolf
Sirius3 hat geschrieben: Donnerstag 12. Juli 2018, 14:34 Django kennt Sessions, in denen man solche Informationen ganz einfach speichern kann.
Danke, hat mir sehr geholfen. :P