ich bin gerade dabei mich in Python und Django einzuarbeiten. Als Übungsobjekt soll eine kleine Vereinswebseite erstellt werden. Ich bin auf folgendes (für mich derzeit unlösbares) Problem gestoßen:
Für meine Seite habe ich 2 Apps erstellt: Testseite1 und Testseite2
Für beide Seiten gibt es ein base.html Template. In einer Navbar soll der Name des angemeldeten Benutzers angezeigt werden.
Code: Alles auswählen
.
.
.
<div class="badge bg-primary text-wrap" >
base: {{user}}
{% if user.is_authenticated %}
{{user}}
{% else %}
<p>nicht angemeldet</p>
{% endif %}
</div>
.
.
.
Das Template von Testseite1 sieht so aus...
Code: Alles auswählen
{% extends 'base.html'%}
{% block content %}
<p>Testseitentext</p>
{% endblock %}
Code: Alles auswählen
from django.shortcuts import render
def html(request):
context= {'title': "Test", 'user': request.user}
return render(request=request, template_name='index/testseite.html', context=context)
Das Template von Testseite2..
Code: Alles auswählen
{% extends 'base.html'%}
{% block content %}
<table class="table table-striped">
<tr>
<th>Belegnummer</th>
<th>Datum</th>
<th>Buchungstext</th>
<th>Kategorie</th>
<th>Betrag</th>
<th>Vorschuss</th>
</tr>
{% for row in daten %}
<tr>
<td>{{row.0}}</td>
<td>{{row.1}}</td>
<td>{{row.2}}</td>
<td>{{row.3}}</td>
<td>{{row.4}}</td>
<td>{{row.5}}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
...wird mit folgendem view aufgerufen:
Code: Alles auswählen
from django.shortcuts import render
import csv
def html(request):
with open(r'C:\Users\Test\Nextcloud4\Kassenbuch\2022\Journal.csv') as csvFile:
csv_objekt = csv.reader(csvFile, delimiter=',')
i=0
Abteilung=str(request.user)
if Abteilung=="12-Tischtennis":
for row in csv_objekt:
if i<3:
i=i+1
continue
if i==3:
kassenstand=row[32]
i=i+1
continue
if i==4:
i=i+1
continue
if row[31]!="":
daten.append([row[1], row[2], row[3], row[6], row[31], row[32]])
context={'daten': daten, 'kasse': kassenstand, 'user': Abteilung, 'title': "Testtietel"}
elif Abteilung=="15-Vorstand":
for row in csv_objekt:
if i<3:
i=i+1
continue
if i==3:
kassenstand=row[16]
i=i+1
continue
if i==4:
i=i+1
continue
if row[15]!="":
daten.append([row[1], row[2], row[3], row[6], row[15], row[16]])
context={'daten': daten, 'kasse': kassenstand, 'user': Abteilung, 'title': "Testtietel"}
elif Abteilung=="16-Angeln":
for row in csv_objekt:
if i<3:
i=i+1
continue
if i==3:
kassenstand=row[18]
i=i+1
continue
if i==4:
i=i+1
continue
if row[17]!="":
daten.append([row[1], row[2], row[3], row[6], row[17], row[18]])
context={'daten': daten, 'kasse': kassenstand, 'user': Abteilung, 'title': "Testtietel"}
else:
context={}
return render(request=request, template_name='index/index.html', context=context)
Nun zum eigentlichen Problem:
Der Name des angemeldetet Users wird in der Navbar nicht immer angezeigt. Rufe ich Testseite1 auf, funktioniert es tadellos. Das heißt, beide {{user}} im base.html (sowohl innerhalb des if als auch außerhalb) werden korrekt ausegegeben. Rufe ich dagegen Testseite2 auf, ist das anders. Der erste {{user}} im base.html wird korrekt ausgegeben, wärend der 2. (innerhalb von if) nicht ausgegeben wird. Stattdessen erscheint dort der Text aus dem else. Wie kann das sein? Ich finde keine Lösung.