Code: Alles auswählen
Monat: {% now "m" %}
geht wunderbar
Code: Alles auswählen
{% if now "m" in [01, 06, 07] %}
Code: Alles auswählen
Monat: {% now "m" %}
Code: Alles auswählen
{% if now "m" in [01, 06, 07] %}
Code: Alles auswählen
In [87]: 01
Input In [87]
01
^
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers
Code: Alles auswählen
{% now "m" as monat%}
{% if monat == "10" %}
Hallo!
{% endif %}
Code: Alles auswählen
{% if monat in ["01", "06", "07"] %}
Code: Alles auswählen
def mein_view(request):
...
return render(request, template, {'monate': ['1', '6', '7']})
# im Template
{% now "n" as monat %}
{% if monat in monate %}
Code: Alles auswählen
from django.utils import timezone
# im View
is_special_month = timezone.now().month in [1, 6, 7]
Da ergibt sich ein neues Problem: Ich brauche diese Monatsoption auch im Login ... und da habe ich keine Ahnung, wo das zugehörige view zu finden ist. Das ist ja irgendwie in Django eingebaut - kann ich das irgendwie ändern?
Code: Alles auswählen
{% block content %}
<h2>Registrieren</h2>
<form method="post" action="{% url 'registrieren' %}">
{% csrf_token %}
{{ form.as_p }}
<h2>Achte hier unten auf die richtige Schreibweise - du kannst deinen Namen nach dem Speichern nicht mehr ändern!</h2>
{{ profile_form.as_p }}
{% now "m" as monat%}
{% if monat == "10" or monat == "06" or monat == "07" %}
<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:
<form>
<label> neues Schulhalbjahr? </label>
<input id = "neu" type="text">
</form>
{% endif %}
<input type="submit" value="Registrieren">
</form>
{% endblock %}
Code: Alles auswählen
def registrieren(req):
if req.method == 'POST':
form = Register_Form(req.POST)
profile_form = Schueler_Profil_Form(req.POST)
if form.is_valid and profile_form.is_valid():
#user.email = form.cleaned_data['Email']
user = form.save()
profile = profile_form.save(commit=False)
kurs = profile_form.cleaned_data['kurs']
if kurs == "i":
profile.stufe = 0
else:
jg = profile_form.cleaned_data['jg']
stufe_liste = [2,4,12,20,26,32,50]
profile.stufe = stufe_liste[jg-5]
if kurs in ["Y","R","E","B"]:
profile.stufe +=1
sj, hj = name_hj()
#neu = ["neu"]
#print(neu)
profile.sj = sj
profile.hj = hj
profile.user = user
profile.save()
username = form.cleaned_data['username']
password = form.cleaned_data['password1']
user = authenticate(username=username, password=password)
login(req, user)
group = Group.objects.get(name='Schüler')
user.groups.add(group)
return redirect('kategorien')
else:
form = Register_Form()
profile_form = Schueler_Profil_Form()
context = {'form' : form, 'profile_form' : profile_form}
return render(req, 'registration/registrieren.html', context)
Code: Alles auswählen
def registrieren(req):
if req.method == 'POST':
form = Register_Form(req.POST)
profile_form = Schueler_Profil_Form(req.POST)
if form.is_valid and profile_form.is_valid():
# Hier dein ganzer Code
if timezone.now().month in [1, 6, 7]:
return redirect('abfrage_neues_schuljahr')
else:
return redirect('kategorien')
else:
form = Register_Form()
profile_form = Schueler_Profil_Form()
context = {'form' : form, 'profile_form' : profile_form}
return render(req, 'registration/registrieren.html', context)
Code: Alles auswählen
{% block content %}
<h2>Registrieren</h2>
<form method="post" action="{% url 'registrieren' %}">
{% csrf_token %}
{{ form.as_p }}
<h2>Achte hier unten auf die richtige Schreibweise - du kannst deinen Namen nach dem Speichern nicht mehr ändern!</h2>
{{ profile_form.as_p }}
{% now "m" as monat%}
{% if monat == "10" or monat == "06" or monat == "07" %}
<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:
<label> neues Schulhalbjahr? </label>
<input id="neu" name="neu" type="text">
{% endif %}
<input type="submit" value="Registrieren">
</form>
{% endblock %}
Code: Alles auswählen
def registrieren(req):
if req.method == 'POST':
neues_halbjahr = req.POST.get('neu', 'nein')
form = Register_Form(req.POST)
profile_form = Schueler_Profil_Form(req.POST)
if form.is_valid and profile_form.is_valid():
# Dein ganzer Code
if neues_halbjahr.lower() == 'ja':
# Hier das Ergebnis verarbeiten
return redirect('kategorien')
else:
form = Register_Form()
profile_form = Schueler_Profil_Form()
context = {'form' : form, 'profile_form' : profile_form}
return render(req, 'registration/registrieren.html', context)
Ich habe das mit dem Login schon fast hinbekommen - aber noch nicht ganz. Wahrscheinlich habe ich das mit "... Ergebnis vorher auszulesen" noch nicht verstanden.
Code: Alles auswählen
def login(req):
if req.method == 'POST':
neues_halbjahr = req.POST.get('neu', 'nein')
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)
if user is not None:
login(req, user)
return redirect('kategorien')
else:
print("kein user!")
if neues_halbjahr.lower() == 'ja':
print("neu")
else:
print("nicht neu")
else:
form = Login_Form()
context = {'form' : form}
return render(req, 'registration/login.html', context)
Ja, jetzt klappt "neu/nicht neu", jetzt klappt aber das login nicht mehr: "login() takes 1 positional argument but 2 were given"
Code: Alles auswählen
def login(req):
if req.method == 'POST':
neues_halbjahr = req.POST.get('neu', 'nein')
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)
if neues_halbjahr.lower() == 'ja':
print("neu")
else:
print("nicht neu")
if user is not None:
login(req, user)
return redirect('kategorien')
else:
print("kein user!")
return redirect('kategorien')
else:
form = Login_Form()
context = {'form' : form}
return render(req, 'registration/login.html', context)
Ja , das habe ich tatsächlich hinbekommen. Allerdings habe ich jetzt schon die nächste Frage: