Warum wird mein Template nicht aufgerufen?

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Ich stehe schon wieder auf dem Schlauch (und hoffe das wird nicht zu peinlich für mich):
Also zum Beginn des neuen Halbjahres, also am 1.2. werden alle Zähler der Schülerinnen und Schüler zurückgesetzt. Wenn sie sich jetzt anmelden und fleißig Aufgaben rechnen, sind die dann "weg" - das ist blöd. Aus diesem Grunde können sie jetzt im Januar wählen, ob sie jetzt schon mit dem neuen Schuljahr anfangen wollen. Wenn sie sich neu anmelden, funktioniert das wie gewünscht, die entsprechende Frage soll aber auch gestellt werden, wenn sie schon angemeldet sind.
Die Funktion, die aufgerufen wird, ist diese:

Code: Alles auswählen

def halbjahr_pruefen(req):
    user = req.user.profil
    heute = datetime.now()
    if heute.month == 1 or heute.month == 6 or heute.month == 7:        #Frage nach neuem Halbjahr
        next_schuljahr, next_halbjahr = name_next_halbjahr()
        if user.halbjahr == next_halbjahr and user.schuljahr == next_schuljahr:                   #user arbeitet schon am nächsten halbjahr
            pass
        else:
            if user.voreinst.get("no_halbjahr", "False") == "False":          #überprüft, ob Frage nicht gestellt werden soll
                if heute.month == 1:
                    monat = "Juni"
                else:
                    monat = "Januar"
                context = {'monat' : monat}
                print(context)                
                return render(req, 'naechstes_halbjahr.html', context)
    else:                                                               #Überprüfung, ob Halbjahr aktuell ist
        schuljahr, halbjahr = name_halbjahr()
        if user.halbjahr == halbjahr and user.schuljahr == schuljahr:
            pass  
        else:                                                           #falls nicht
            user.halbjahr = halbjahr
            user.schuljahr = schuljahr
            user.save()
            return redirect(neues_halbjahr)
    if User.objects.filter(pk=req.user.id, groups__name='Lehrer').exists():
        return redirect('index')
    return redirect('uebersicht')   
und das aufgerufene Template dieses:

Code: Alles auswählen

{% extends 'auswahl.html' %}  
{% block content %}
<body>
  <h2>Neues Halbjahr beginnen?</h2>
      <h2>Wir haben jetzt {% now "F" %} - bald gibt es Zeugnisse. Sollen deine Aufgaben, die du ab jetzt machst, schon für das nächste Schulhalbjahr zählen?</h2>
      Diese Wahl kannst du nicht rückgängig machen. Bestätige sie also bitte, indem du hier "ja" eingibst:
      <br>
      <br>
      <form method="POST" action="{% url 'naechstes_halbjahr' %}">
        {% csrf_token %}
        <form>
            <label> neues Schulhalbjahr? </label> 
            <input id="neu" name="neu" type="text">
            <br>
            <br>
            <input type="Checkbox"  name="keinefrage"> 
            <label> Nein, ich möchte <b>nicht</b> das neue Halbjahr anfangen und <b>möchte auch bis zum nächsten {{monat}} nicht mehr danach gefragt werden!</b> </label>
            <br>
            <br> 
            <input type="submit" value="weiter">
        </form> 
</body>  
{% endblock %}
</html>
Wenn sich die Kids neu anmelden, wird "halbjahr_pruefen" hier aufgerufen (und das klappt auch):

Code: Alles auswählen

def anmelden(req):
    titel = "Anmelden" 
    if req.method == 'POST':
        #get_expire_at_browser_close()
        form = Login_Form(req.POST)
        if  form.is_valid ():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']            
            user = authenticate(req, username=username, password=password)
            cookie_loeschen = req.POST.get('cookie_loeschen') 
            if cookie_loeschen == 'on':
                req.session.set_expiry(0)
            if user is not None:
                login(req, user)
                return halbjahr_pruefen(req)
        titel = "Username und/oder Passwort stimmen nicht"
    form = Login_Form()
    context = {'form' : form, 'titel': titel} 
    return render(req, 'anmelden.html', context)
Wenn die Seite "index" oder "uebersicht" aufgerufen wird, wird die Funktion "halbjahr_pruefen" auch aufgerufen und "print" gibt auch brav den "content" aus -soweit wird der Code ausgeführt - das Template 'naechstes_halbjahr.html' wird anscheinend auch aufgerufen, zumindest bekomme ich einen Fehler, wenn ich das Template umbenenne - das Template wird aber nicht angezeigt und ich komme ums Verplatzen mal wieder nicht drauf warum! Hilfe!
Hier noch der Code der beim Klick auf "index" ausgeführt wird:

Code: Alles auswählen

def index(req):
    anz_angemeldet = Profil.objects.count()
    anz_lehrer = User.objects.filter(groups__name="Lehrer").count()
    anz_aufg = Protokoll.objects.count()
    if req.user.is_authenticated and not req.user.is_superuser:
        halbjahr_pruefen(req)
    if User.objects.filter(pk=req.user.id, groups__name='Lehrer').exists():
        lehrer = True
    else:
        lehrer = False
    return render(req, 'index.html', context= {'lehrer': lehrer, 'anz_angemeldet': anz_angemeldet, 'anz_lehrer': anz_lehrer, 'anz_aufg': anz_aufg})
Wie gesagt, auch hier wird "halbjahr_pruefen" aufgerufen und der "content" ausgegeben - das wars aber.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Code: Alles auswählen

return halbjahr_pruefen(req)

Code: Alles auswählen

halbjahr_pruefen(req)
Ich sehe da einen fundamentalen Unterschied.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Ich hatte befürchtet, dass ich mich blamiere. :cry:
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pitwheazle: Randbemerkung: Der Ausdruck beim ``if`` ergibt einen Wahrheitswert:

Code: Alles auswählen

    if User.objects.filter(pk=req.user.id, groups__name='Lehrer').exists():
        lehrer = True
    else:
        lehrer = False
Da braucht man also kein ``if``/``else`` weil man auch gleich diesen Wahrheitswert zuweisen kann:

Code: Alles auswählen

    lehrer = User.objects.filter(pk=req.user.id, groups__name='Lehrer').exists()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten