Django {% if user.is_authenticated %}
Verfasst: Samstag 19. Februar 2022, 13:59
Hallo in die Gruppe,
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.
Zu Testzwecken habe ich {{user}} 2x drin, einmal außerhalb von if und einmal innerhalb von if.
Das Template von Testseite1 sieht so aus...
... und wird mit folgendem view aufgerufen:
Das Template von Testseite2..
...wird mit folgendem view aufgerufen:
Der Code sieht bestimmt wie Anfängercode aus, ist aber egal. Er funktioniert und das reicht mir.
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.
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.